官方题解 | 欢乐赛#60 题解
赛纲介绍
本次题目的总体题目难度如下,各位选手可以借此评估一下自身的技术水平
题目编号 题目名称 题目难度 T1 小明的动物园门票 入门 T2 小明的食物投喂 入门 T3 人气比拼 入门 T4 点名 入门 T5 小海狮的连击 普及- T6 领地计算 普及-
T1 赛跑
题目大意
动物园的成人票一张 aaa元,学生票一张 bbb 元。问两个成人和一个学生需要花多少钱买票。
题解思路
成人票一张 aaa元,学生票一张 bbb 元,那么两个成人和一个学生的门票当然为 2×a+b2 \times a + b2×a+b。
参考代码
T2 小明的食物投喂
题目大意
便利店里一根香蕉 aaa 元, 一个汉堡包 bbb 元, 如果经费足够同时购买 101010 根香蕉和 111 个汉堡的话, 小明会先买一个汉堡然后把剩下所有钱用来买香蕉,否则小明会只购买一个汉堡。问小明购买完物品之后,手上还剩下多少元钱?
题解思路
本题需要先判断一下 101010 根香蕉和 111 个汉堡 的价格能否支付得起。如果可以支付的话那么将剩下的金额 n−10×a+bn - 10 \times a + bn−10×a+b 除以 aaa 取余数。否则的话只购买一个汉堡,答案为 n−bn - bn−b 。
参考代码
T3 人气比拼
题目大意
现在动物园里一共有 nnn 只动物,每只动物都有自己的人气值 viv_ivi ,并且每只动物都归属于两个势力其中之一。一个势力的人气值为势力内所有动物人气值的总和。
小明可以选择一只动物,使得它改换到另一个阵营。问最终人气值的差值最小是多少?
题解思路
本题可以先按照变化之前的情况,计算一下两个阵营的人气值分别是多少。
而后小明可以选择枚举每一只动物, 考虑将其转换到另一个阵营, 那么当前阵营的人气值减去该动物的人气值 v[i]v[i]v[i], 另一阵营的人气值加上 v[i]v[i]v[i]。 在所有情况中找出两个阵营人气差距最小的情况。
参考代码
T4 点名
题目大意
名单给定 nnn 个字符串, 而后给出 mmm 个查询, 每次查询问一个字符串是否在名单中出现过。
题解思路
本题对于学习过 mapmapmap 的同学可以直接使用 mapmapmap 来快速解决。
本题考虑朴素的查询方法,对于每一个询问,遍历整个名单查找是否出现过这个名字,出现过的话则输出该字符串。
参考代码
T5 小海狮的连击
题目大意
给定一个长度为 nnn 的数组 hhh, 如果当前的数字 hih_ihi 严格大于此前所有数字的平均值,那么连击次数 +1+ 1+1, 否则连击次数会回到 111 次。
题解思路
本题数据范围较大, nnn 的最大值为 10510^5105。 如果直接枚举前面所有数字的总和进而求平均数, 则复杂度为 O(n2)O(n^2)O(n2), 运行超时。因此可以设置一个累加器 sumsumsum 记录到目前为止所有数字, 每次可以直接 sum/(i−1)sum / (i - 1)sum/(i−1) 来求平均数。
参考代码
T6 领地计算
题目大意
动物园是一个 n×nn \times nn×n 的一个二维方阵, 现在有 mmm 只动物,每只动物会对以点 (xi,yi)(x_i, y_i)(xi ,yi )为中心, 边长为 did_idi 的正方形区域释放一份属于自己势力的气息。
一个位置最终属于哪一方取决于哪一方在此处释放的气息更多,如果一个坐标双方势力释放的气息一样多,则该位置属于无主之地。问今天狮子帮和老虎帮的领地分别占据了几个位置?
题解思路
每只动物会对以点 (xi,yi)(x_i, y_i)(xi ,yi )为中心, 边长为 did_idi 的正方形区域产生影响,我们考虑设置狮子帮的气息为 +1+1+1, 老虎帮为 −1-1−1。在我们记录每一只动物的贡献并且计算之后,最终地图上的点如果是正数则是狮子帮的领地,如果是负数则是老虎帮的领地。
参考代码