非官方题解-ACGO挑战赛#17
T1:凤梨酥
这道题目要求我们根据给定的馅料含量百分比( a%a\%a% )和风梨占总重量的百分比( b%b\%b% )来判断风梨酥的等级。根据题目描述,等级划分如下:
1. 一等风梨酥:馅料含量 ≥\geq≥ 50%50\%50% 且风梨占比 ≥\geq≥ 30%30\%30%。
2. 二等风梨酥:馅料含量 ≥\geq≥ 50%50\%50% 且风梨占比 ≥\geq≥ 15%15\%15% 但 <<< 30%30\%30%。
3. 三等风梨酥:馅料含量 <<< 50%50\%50% 或风梨占比 <<< 15%15\%15%。
我们需要根据输入的 aaa 和 bbb 值,输出对应的等级(1、2或3)。
解决代码
代码解释
1. 输入处理:读取两个整数a和b,分别代表馅料含量百分比和风梨占比百分比。
2. 等级判断:
* 如果 a≥50a \geq 50a≥50 且 b≥30b \geq 30b≥30 ,输出1(一等风梨酥)。
* 否则,如果 a≥50a \geq 50a≥50 且 b≥15b \geq 15b≥15 ,输出2(二等风梨酥)。
* 其他情况(a<50a < 50a<50 或 b<15b < 15b<15),输出3(三等风梨酥)。
3. 输出结果:根据条件判断输出对应的等级。
这样就能正确判断并输出风梨酥的等级了。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
T2:买凤梨1
这道题目要求我们从给定的n个风梨中,统计出满足以下两个条件的风梨数量:
1. 重量在 500g500g500g 到 10000g10000g10000g 之间(包括 500500500 和 100001000010000 )。
2. 重量是一个回文数。
解决思路
1. 输入处理:首先读取整数n,表示风梨的数量,然后读取n个风梨的重量。
2. 条件判断:对于每个风梨的重量,检查是否满足:
* 重量在 500500500 到 100001000010000 之间。
* 重量是回文数。
3. 统计结果:统计满足上述条件的风梨数量,并输出结果。
解决代码
代码解释
1. 函数 isPalindrome :判断一个数字是否是回文数。
* 将数字转换为字符串,反转后与原字符串比较,如果相同则是回文数。
2. 主函数 main:
* 读取风梨的数量n和每个风梨的重量。
* 遍历所有重量,检查是否满足条件(重量在 500500500 到 100001000010000 之间且是回文数)。
* 统计满足条件的风梨数量并输出。
这样就能高效地统计出最多可以买回多少个好的风梨。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
T3:集训课
这道题目要求我们找到一段最长的连续天数,使得在这段天数内,所有学生都在学校(即他们的日程表中对应天数均为1)。我们需要遍历每一天,检查从该天开始的最长连续天数满足所有学生都在学校。
解决思路
1. 输入处理:读取学生数量 nnn 和天数 mmm ,然后读取每个学生的日程表。
2. 检查每一天:对于每一天,检查从该天开始的最长连续天数,使得所有学生在这段天数内都为1。
3. 更新最长天数:在遍历过程中,记录满足条件的最大连续天数。
解决代码
代码解释
1. 输入处理:读取 nnn 和 mmm ,然后读取每个学生的日程表,存储在二维向量 schedule 中。
2. 遍历每一天:对于每一天 start ,初始化 end 为 start ,然后检查从 start 到 end 的天数是否所有学生都在学校。
3. 更新最长天数:如果所有学生都在学校,则 end 递增,直到不满足条件为止。更新 max_days 为当前最大连续天数。
4. 输出结果:最终输出满足条件的最大连续天数。
这种方法确保了我们能够高效地找到最长的连续天数,使得所有学生都在学校。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
T5:买凤梨2
这道题目要求我们处理多个甜度区间的推荐,并回答多个查询,每个查询询问某个区间内有多少个甜度被至少 kkk
本书推荐。我们需要高效地处理这些区间和查询。
解决思路
1. 差分数组处理区间:使用差分数组来统计每个甜度被多少本书推荐。
2. 前缀和数组:将差分数组转换为前缀和数组,得到每个甜度被推荐的总次数。
3. 合适甜度标记:创建一个数组标记哪些甜度是被至少 kkk 本书推荐的。
4. 前缀和优化查询:使用前缀和数组来快速回答每个查询区间内合适甜度的数量。
解决代码
代码解释
1. 差分数组处理区间:使用差分数组 diff 来记录每个甜度区间的开始和结束,这样可以高效地统计每个甜度被推荐的次数。
2. 前缀和数组计算推荐次数:通过差分数组计算前缀和 count,得到每个甜度被推荐的总次数。
3. 标记合适甜度:创建数组 suitable,标记哪些甜度是被至少 kkk 本书推荐的。
4. 前缀和优化查询:构建前缀和数组 prefix,使得每个查询可以通过 prefix[r] - prefix[l - 1] 快速得到区间 [l,r][l, r][l,r] 内合适甜度的数量。
这种方法确保了我们能够高效地处理大规模数据,并在常数时间内回答每个查询。