CF778C Peterson Polyglot [*easy]
考虑对于每一个深度为 (i) 的询问,答案为所有 [(dep = i) 的结点的子树合并起来,子树合并时被删除的结点个数] 的和减去 (dep = i) 有儿子的结点数。
直接暴力 (trie) 合并即可。显然时间复杂度 (le sumlimits_{u=1}^{n} siz_{u的轻儿子})
ac link
CF778D Parquet Re-laying [*hard]
考虑建立一个中转点,以 (n equiv 0 pmod 2) 为例。
这个中转点为 :
UUUUU
DDDDD
UUUUU
DDDDD
考虑遇到一个不符合答案的情况。遇到:
LR..
LR..
......
就直接旋转即可。
否则会遇到这种情况:
LR..
U....
D....
那么我们的任务是把那个
U.....
D.....
转成 LR....
。
于是就转化成了一个子问题。递归解决即可。
CF778E Selling Numbers [*medium]
不是很难,但是蒟蒻调了很久 /kk
和 CF1188D Make Equal 几乎一模一样
直接记录一下这一位对于进位的次数即可。(dp_{i, j}) 表示前 (i - 1) 个位的和,有 (j) 个数对第 (i) 位进了位。
转移的时候进位的一定是后 (i) 位的值最大的。
然后转移的时候只需要枚举这一位 (A) 是什么即可
因此直接对这些后缀进行排序即可。
这题并不需要把所有串接起来,直接利用上一次的排序值并在前面添加一个字符即可。