AtCoder Regular Contest-- (ARC) 229 解题报告

ARC229A
思考操作的本质是什么:如果我们先构造一个全 \(R\) 字符串,然后在所有空隙里插入 A 或 C,那么一次操作就是将 AC 交换成 CA。
因此我们考虑构造一个长度为 \(99\) 的字符串。所有偶数位都是 R,奇数位上是 A 或 C。假设 C \(<\) A,\(f(S)\) 即为去掉 R 之后剩余字符串的逆序对。
问题转化成了,构造一个长为 \(50\) 的 01 串,使得其中包含 \(0 \le X \le 600\) 个逆序对,问题是简单的。
ARC229B
显然反过来看问题:\(cur\) 一开始任定一个值,后来下标不断减,\(cur\) 可以变成 \(2cur\) 或者 \(2cur + 1\),然后接着减。
依旧转换思考系,我们发现这个操作其实等效于在一个数组 \(p_i = a_i - 2a_{i + 1}\) 上进行 \(-1\) 操作。
那么最大操作次数其实是 \(\max p_i\)。但是由于我们没有考虑 \(p_n\),所以至少需要用一次操作,答案就是 \(\max(1, \max p_i)\)。
ARC229C
那么显然的是,\(A_1\) 和 \(A_n\) 都会被少算一次,并且相邻两数之和的奇偶性也会影响答案。那么我们只需要考虑 \(A_1, A_n\) 的所有奇偶性组合即可。在同种奇偶性组合中,\(A_1, A_n\) 直接挑最大的就好了。
考虑固定了 \(A_1, A_n\) 后如何构造最小的。显然,相邻元素奇偶性最好不同。那么直接贪心就做完了。
ARC229D
首先这是一个公平组合游戏,有一种方法就是猜一个 P 状态然后证明。
首先,如果剩下的总个数小于 \(K\),那肯定是 P 了。
我们手玩一下最小值:发现似乎可以让最小值为 \(m\),然后 \(K > \sum A_i - m\) 就是 P position。
然后考查一个回合:因为总共有 \(K + 1\) 堆石子,所以进行 \(K\) 次操作之后,显然有一堆没有变。
那么,如果这一堆包括了最小值,那么只需要满足那一堆没变的至少比新最小值 \(\ge K\)。
那么不妨直接让最小值一次性减少 \(K\)。
考虑到终止状态的 \(m = 0\),那么我们对 P position 加一个限定,\(K|m\)。
这样,如果碰了最小值,就至少需要减去 \(K\) 了。但是如果最小值不变,显然剩下的多余数量又不够满足 \(K\) 次操作,所以 P 不能到达 P。
那么考虑 N 能否到达 P:
-
假设此时的 \(K|m\),那直接把其它的堆全部变成 \(m\) 即可。因为根据定义,此时至少有 \(K\) 个石子可供操作。
-
否则,将其中 \(K\) 堆石子变成离 \(m\) 最近的 \(K\) 的倍数即可。
所以,P position 当且仅当

浙公网安备 33010602011771号