ARC128E

· · 题解

考虑按位贪心,即每次选择一个最小的能够使得后面有至少一个选择方案的方案选择。

首先我们探究一下一个序列有解的充要条件。直觉地,我们可以每次选择 K 个不相同的点放在最前面,直到最后剩余的点不足 K 个,并且每种颜色都有 \le 1 个。此时把它们放在最前面即可。既然 N=K 时都能通过 1234\dots K12 \dots K1234 来构造(如果最后的是其它数那么把前面的 K 个数作适当置换使得最后的数合法),而且每次拉的 K 个数不相同,所以能这么构造显然是充要条件。

此时就能转化为这样一个问题:有 nK 堆石子,每次可以从 K 堆石子中取正好一个,问能不能取完。

结论:当且仅当最大的那堆不超过 n 个才能取完。

证明:首先只能取 n 轮,所以最大的那堆如果超过 n 个一定取不完。其次正好等于 n 个的至多有 K 堆,取这 K 堆就能转化为 K \leftarrow K-1 的子问题了。

类似的,nK+c 的石子个数则是至多 n+1 个,并且有 n+1 个的堆数至多为 c

于是我们就能初步地作此按位贪心:假设当前需要考虑后 nK+c 个位置。如果 n+1 个的堆数正好为 c 那就从它们中选择,否则随便选一个。(当然不能选之前 K-1 个出现过的)

看上去是对的。但是万一由于前面 K 个的限制,导致在选择当前位之后无法构造了呢?

显然这种问题等价于当前位无数可选。如果 n+1 个的堆数正好为 c,并且这些数全部在前 K-1 个出现过,那么在选前一个的时候,如果 c+1 不为 n(即 n 没有减 1),那么前一个所对应的颜色在当时就有 n+2 个,不符合所有都至多 n+1 个的限制,早该无解了。否则此时正确的 c0,正确的 nn+1,也等价于所有数都至多 n+1 个,无解。

否则如果可选的数只有 K-2 种,那么由于上限是 n+1,所以总数上限为 nK+K-2n-2。由于 n \ge K,所以此时的石子数量 \le (n-1)K。而由于整数除法的特性,石子数量 \ge nK,矛盾。

于是显然可以构造。每次暴力选出一种数即可。时间复杂度 O(n\sum a)