Codeforces Round #629 (Div. 3)
这场小错好多啊,自闭了。
(A. Divisibility Problem)
答案显然是 (b-a\%b) 。特别的,如果算出来是 (b) ,输出 (0) 。
(B. K-th Beautiful String)
考虑从后往前枚举前一个 (b) 的位置即可。
(C. Ternary XOR)
从前往后看,第一个 (1) 之前,平分到 (a,b) 里面。
第一个 (1) 分给 (a) ,剩余部分分给 (b) 。
(D. Carousel)
分类讨论。
若 (n) 是偶数
我们 (1,2) 交替填,一定不会有不合法的情况。
若 (n) 是奇数
分两种情况。
- 存在两个相邻的相同,那么,这两个都填 (1) ,剩余的 (1,2) 交替。
- 选一个填 (3) ,剩余的 (1,2) 交替。
(E. Tree Queries)
显然,若存在一条路径满足条件, 我们一定可以把终点放在该询问中深度最大的点上。
找出深度最大的点 (v) ,然后我们只需要对剩下的点 (u_i) 和 (v) 求 (lca) ,判断 (dis(u_i,lca)leq 1) 即可。
(F. Make k Equal)
考虑枚举最终得到的值 (val) 。显然 (val) 一定在数组中出现过。
注意到每次只能改最大最小,所以我们一定是把所有小于 (val) 的先改到 (val-1) ,所有大于 (val) 的改到 (val+1) ,然后再进行接下来的动作。
设数组中 (val) 的个数为 (num) ,调整小于 (val) 的数需要 (cost1) 步,调整大于 (val) 的数需要 (cost2) 步。
若 (numgeq k) ,那么答案等于 (0) 。
若小于 (val) 的数不少于 (k-num) ,答案为 (cost1+k-num) 。
若大于 (val) 的数不少于 (k-num) ,答案为 (cost2+k-num) 。
若两边都不够,答案为 (cost1+cost2+k-num) 。
对所有的答案取一个 (min) 就是最后的答案。