【题解】AGC059B Arrange Your Balls

按顺序相同颜色的球一段一段放下去,这样每种颜色产生一次相邻的贡献,答案是 颜色数 $c$ 。

就像 a bb cc dd ee (- a) 就是 $5$ 种颜色。

也容易发现答案不可能小于 $c - 1$ ,这样总存在两种颜色之间不能到达。

如何构造答案为 $c-1$ 的情况?

为最小化不同颜色的相邻数,我们要尽可能利用已经有的相邻,使这种相邻出现两次。

样例 3 3 2 5 2 给了我们一种灵感:让一个球两边的颜色相同。

前面举的例子中 a bb cc dd ee (- a) 答案是 $5$ , 考虑避免 e 和 a 颜色不同, 我们就需要在中间放入 b 使得它是已经与 a 相邻过的球,同理放入 c , d ,最后形成的就是 a b c d ee d c b (-a) ,答案为 $4$。

手玩一下会发现一个例子 a b a c a d a e a f ,用一个字母把其它字母岔开。

构造方式就显而易见了:

称只出现一次的字母集合为 $S$ , 出现更多次的集合为 $T$ 。

若 $S$ 非空,从 $S$ 中取出元素放入环。

若 $T$ 非空,从 $T$ 中取出两个相同元素放在之前的两边,若还有还有该元素,重复以下操作:

若 $S$ 非空,从 $S$ 中取出元素放入环的某侧。

从 $T$ 中取出元素放在同侧。

直至 $T$ 为空。

此时 $|S|\leq 1$ 则答案为 $k - 1$,直接放入即可。

否则答案为 $k$ ,排序或直接放入均可。

结论 : $\sum_{a\in T} Cnt_a - 2 |T| + 2\geq |S|$ 时答案为 $k - 1$,否则为 $k$。

构造用一个 deque 可以简单地实现,时间复杂度 $O(n)$

posted @ 2022-12-07 13:31  寂静的海底  阅读(0)  评论(0编辑  收藏  举报  来源