【解题总结】Codeforces Round 670 (Div. 2)

C Link Cut Centroids

题意:给定一个树,要求删掉某条树边、再加入某条新边使得新图仍然是树,且重心唯一。输出一个可行方案。

由重心性质:一个树要么有一个重心,要么有两个在同一条边上的重心。

对于后者,设两个重心为 a , b a, b a,b。只要把 ( a , b ) (a, b) (a,b) 断开,然后把 a a a 的一个叶子割下来接到 b b b 上即可。

D Three Sequences

考虑差分序列,设 d i = a i − a i − 1 ( i > 1 ) d_i = a_i - a_{i-1} (i > 1) di=aiai1(i>1),如果设 c 1 = x c_1 = x c1=x 那么会发现 b n = t − x b_n = t -x bn=tx,其中 t = a 1 + ∑ d i > 0 d i t = a_1 + \sum_{d_i > 0}d_i t=a1+di>0di

最小化 max ⁡ ( b i , c i ) \max(b_i, c_i) max(bi,ci) 就是最小化 max ⁡ ( b n , c 1 ) \max(b_n, c_1) max(bn,c1),即令 x x x 尽量取 t t t 的一半即可。由于操作在差分序列上是单点修改,因此很容易在 O ( 1 ) O(1) O(1) 内更新答案。

E Deleting Numbers

题意:交互题,有一个数 x ∈ [ 1 , n ] x \in [1, n] x[1,n] 要猜。一开始集合中有这 n n n 个数。有两种操作:

  1. B a:得到集合中未被删除的 a a a 的倍数的个数,并删除所有除 x x x a a a 的倍数。须 a > 1 a > 1 a>1
  2. A a:给出 a a a,得到集合中未被删除的 a a a 的倍数的个数。 a ≥ 1 a \ge 1 a1

要求操作数 ≤ 1 0 4 \le 10^4 104 n ≤ 1 0 5 n\le 10^5 n105

容易想到应该把 x x x 的质因子及其幂次全部得到。显然对 ≤ n \le \sqrt{n} n 的所有质因子可以暴力求出。

现在要看 x x x 有无更大的质因子。由于这样的质因子至多有 1 个,我们考虑检查所有 > n > \sqrt{n} >n 的质数。

但这些数太多,一个检查两遍不行,也没法二分。怎么办?分块即可。每经过一个块就用 A 1 检查,如果查到质因子在某个块内就暴力把这个块扫一遍即可。

小结

我坑我自己的一场。

C 在只有唯一重心时我一直输出 1 2,因此 WA 了 3 次。

E 想到了 A 1 很有用,以及对 ≤ n \le \sqrt{n} n 的要暴力,但没想到对大质因子分块。只能说这应该确实是一个有用的 trick。

猜你喜欢

转载自blog.csdn.net/zqy1018/article/details/108586825