Codeforces Round #629 (Div. 3)

Codeforces Round #629 (Div. 3)

这场小错好多啊,自闭了。

\(A. Divisibility Problem\)

答案显然是 \(b-a\%b\) 。特别的,如果算出来是 \(b\) ,输出 \(0\)

code

\(B. K-th Beautiful String\)

考虑从后往前枚举前一个 \(b\) 的位置即可。

code

\(C. Ternary XOR\)

从前往后看,第一个 \(1\) 之前,平分到 \(a,b\) 里面。

第一个 \(1\) 分给 \(a\) ,剩余部分分给 \(b\)

code

\(D. Carousel\)

分类讨论。

\(n\) 是偶数

我们 \(1,2\) 交替填,一定不会有不合法的情况。

\(n\) 是奇数

分两种情况。

  1. 存在两个相邻的相同,那么,这两个都填 \(1\) ,剩余的 \(1,2\) 交替。
  2. 选一个填 \(3\) ,剩余的 \(1,2\) 交替。

code

\(E. Tree Queries\)

显然,若存在一条路径满足条件, 我们一定可以把终点放在该询问中深度最大的点上。

找出深度最大的点 \(v\) ,然后我们只需要对剩下的点 \(u_i\)\(v\)\(lca\) ,判断 \(dis(u_i,lca)\leq 1\) 即可。

code

\(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\) 就是最后的答案。

code

posted @ 2020-03-27 10:58  TheShadow  阅读(151)  评论(0编辑  收藏  举报