Codeforces Round #629 (Div. 3)
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\) 步。
若 \(num\geq k\) ,那么答案等于 \(0\) 。
若小于 \(val\) 的数不少于 \(k-num\) ,答案为 \(cost1+k-num\) 。
若大于 \(val\) 的数不少于 \(k-num\) ,答案为 \(cost2+k-num\) 。
若两边都不够,答案为 \(cost1+cost2+k-num\) 。
对所有的答案取一个 \(\min\) 就是最后的答案。