ACGO2024新春欢乐赛全题解
T1:
思路:
题目要求通过复制魔法糖果堆可以获得的最多的糖果数量,可以使用优先队列使小的在前,每次使用最小的两个进行操作,直到最小的两个大于 kkk 为止。
代码:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
T2:
思路:
题意是长度为 nnn 的一块地方,每次能连续打扫 kkk 个地方,几次可以打扫完,而不是每打扫到已打扫过的地方就得断。
所以这题找规律就行,长度为 nnn ,每次可以打扫连续的 kkk 个地方,那么 ⌈n/k⌉\left \lceil n/k \right \rceil⌈n/k⌉ 就行。
代码:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
T3:
思路:
给你两个数,一直把大的减去小的直到其中一个等于 000 为止,注意不能暴力,会TLE。
每次可以把大的数一次性减到小于原来的小的数为止。
代码:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
T4:
思路:
给你一个数列,每次可以选择 kkk 数排序并移到数列末尾,求最少几次可以使数列变成升序排列的。
这题不用什么复杂的计算。
我们设定一个变量 cntcntcnt,每次判断输入的数是否等于所在的位置就行,不是就把 cntcntcnt++,判断的位置要减去 cntcntcnt,因为前面有 cntcntcnt 个数已经被移到末尾了,最后输出 ⌈cnt/k⌉\left\lceil cnt/k \right\rceil⌈cnt/k⌉ 就行。
代码:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
T5:
思路:
40PTS:
使用优先队列让数字大的在前,每次每次让大的减去小的直到最大的两个相等为止。
最后输出 n×q.top()n \times q.top()n×q.top() (qqq 为优先队列名称)就行。
100PTS:
直接判断最大的两个数字是否相等可能会存在无法考虑的情况,如
可以写个函数判断队列内所有元素是否相等,全部相等返回-1,否则返回不相等的位置,然后在进行题目要求的操作就行。
输出同40pts的输出。
代码:
40PTS:
100PTS:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
T6:
思路:
这题就像是给你一排长短不齐大葱,问你怎么切使所有大葱一样长且切的部分最少,那必然是往短的切。
我们可以输入时更新所有数中的最小数,然后再遍历一遍所有数,把每个数和最小数的差加起来,最后输出。
代码:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
T7:
思路:
这题要我们求赶跑年兽的最小需求,因为 kkk 个以上的年兽可以用 kkk 个金币一窝端一次性驱赶,所以可以分类讨论,年兽不小于 kkk 个用 kkk 个金币一次性驱赶,否则用 aia_iai 个金币逐个驱赶。
代码:
T8:
思路:
求输入最早的仅出现一次的数。
每次输入时把对应的标记数组的数增加,如果数为1则为第一次出现,标记出现的位置。
再遍历一遍输出出现最早的仅出现一次的数即可。
代码:
T9:
思路:
快乐值总共为 sss,每个糖果最好的情况应该都是 n×2n \times 2n×2,结果应该是 s/(n×2)s/(n \times 2)s/(n×2),注意因为糖果最多有 n+1n+1n+1 个,最后的结果应该是 min(s/(n×2),n+1)\min (s/(n \times 2),n+1)min(s/(n×2),n+1)。
代码:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
T10:
思路:
题目要求 n×2n \times 2n×2 个是否可以两两配对并保证每一组的和相加均为奇数。
稍微想一下可以发现以下规律:
c=a+b={c&1==1a&1==1,b&1==0 or a&1==0,b&1==1c&1==0a&1==0,b&1==0 or a&1==1,b&1==1\begin{aligned} c=a+b = \begin{cases} c\And 1==1& a\And 1==1,b\And 1==0 \ \operatorname{or} \ a\And 1==0, b\And 1==1 \\ c\And 1==0 & a\And 1==0,b\And 1==0 \ \operatorname{or} \ a\And 1==1,b\And 1==1 \end{cases}
\end{aligned} c=a+b={c&1==1c&1==0 a&1==1,b&1==0 or a&1==0,b&1==1a&1==0,b&1==0 or a&1==1,b&1==1
说白了就是奇数与偶数相加为奇数,偶数与偶数或奇数与奇数相加为偶数。
可以得出当输入的数中,偶数与奇数数量相等时,可以保证每一组的和相加均为奇数。
代码:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
我的思路不一定是最优最正确的解法,只是希望让帮助各位更好的理解题意,部分的题解可能是题目的数据不够毒瘤强度不大,只是碰巧过了。
好了,ACGO2024新春欢乐赛全题解就到这里,下次见!