其他分享
首页 > 其他分享> > Codeforces Round #754 (Div. 2) 部分题解

Codeforces Round #754 (Div. 2) 部分题解

作者:互联网

文章目录

前言

神迹: 模拟赛切掉 A,C,E,但不会 B,D,F。

真就涉及到一丢丢构造和贪心就不会做呗,我是真的菜。

Solutions

A

不难发现,每次操作可以将 a 1 + a 3 − 2 a 2 a_1+a_3-2a_2 a1​+a3​−2a2​ 减小或增大 3 3 3。

若令 p p p 为初始时的 a 1 + a 3 − 2 a 2 a_1+a_3-2a_2 a1​+a3​−2a2​,那么:

B

个人主观感觉这是一道神仙题,比 E 难很多倍。

注意到,若存在一个 i i i 使 [ 1 , i ] [1,i] [1,i] 中 1 1 1 的个数与 [ i + 1 , n ] [i+1,n] [i+1,n] 中 0 0 0 的个数相等,那么一步就可以解决问题了。

那若不存在这样的 i i i 呢?对不起,这样的 i i i 永远都是存在的。下面是简要证明:

特别的,若初始序列已经有序,则只要输出 0 0 0 就足够了。方案构造十分容易,这里不再质数。

总复杂度 O ( ∑ n ) O(\sum n) O(∑n)。

C

为方便叙述,令 [ l , r ] [l,r] [l,r] 优秀,当且仅当 r > l r>l r>l 且其中 a 的个数大于 bc 的个数;令区间 [ l , r ] [l,r] [l,r] 为极小优秀区间,当且仅当 ∀ l ≤ l ′ ≤ r ′ ≤ r \forall l \le l' \le r' \le r ∀l≤l′≤r′≤r 满足 [ l ′ , r ′ ] [l',r'] [l′,r′] 不优秀且 [ l , r ] [l,r] [l,r] 优秀。

通过手玩不难猜出,极短优秀区间的长度不会很大,随便设 k = 50 k=50 k=50 就过了。官方题解说极短优秀区间的长度最大是 7 7 7。

时间复杂度 O ( ∑ k n ) O(\sum kn) O(∑kn),其中 k k k 为常数,可以通过本题。

D

Observation 1

若 x ⊕ y ≤ min ⁡ ( x , y ) x \oplus y \le \min(x,y) x⊕y≤min(x,y),当且仅当 x , y x,y x,y 在二进制表示下的数位相等,即 ⌊ log ⁡ x ⌋ = ⌊ log ⁡ y ⌋ \lfloor \log x \rfloor=\lfloor \log y \rfloor ⌊logx⌋=⌊logy⌋。

Observation 2

令 x , y x,y x,y 属于同一个等价类,当且仅当 x ⊕ y ≤ min ⁡ ( x , y ) x \oplus y \le \min(x,y) x⊕y≤min(x,y)。

则等价类共有 ⌈ log ⁡ n ⌉ \lceil \log n \rceil ⌈logn⌉ 个,每个等价类的大小分别为 1 , 2 , 4 , 8 , ⋯ 1,2,4,8,\cdots 1,2,4,8,⋯(最后一个等价类的大小较为特殊)。

Solution

不难发现,只要我们将两端属于不同等价类的边删去,那么每个分裂出的连通块中的合法起点总和就是答案。

思考一个极端情况: 对于树上每条边 ( u , v ) (u,v) (u,v), u , v u,v u,v 属于不同的等价类。这样合法起点数就是 n n n,达到上界。

那能否构造出来呢?永远都可以!下面以构造方案证明这个性质。

考虑将树上的点按深度的奇偶性分为两类,则每条树边都连接了两个不同类别的点。令第一类的节点个数为 c n t cnt cnt,那么我们可以将 c n t cnt cnt 表示为若干个 2 2 2 的幂次之和,并对于每个拆分出来的 2 r 2^r 2r,在属于该类的节点中填入所有二进制表示下长度为 r + 1 r+1 r+1 的数。第二类的节点填上剩余未填的值即可。

总复杂度 O ( ∑ n ) O(\sum n) O(∑n)。

E

可以发现,当固定了 a , b a,b a,b 之后,答案就是

∑ i = 1 n ∣ ∑ j ∣ i μ ( i j ) ( b j − a j ) ∣ \sum_{i=1}^n \left| \sum_{j|i} \mu(\frac i j)(b_j-a_j) \right| i=1∑n​∣∣∣∣∣∣​j∣i∑​μ(ji​)(bj​−aj​)∣∣∣∣∣∣​

构造多项式 F ( x ) , G ( x ) F(x),G(x) F(x),G(x),其中 F i ( x ) = μ ( i ) F_i(x)=\mu(i) Fi​(x)=μ(i), G i ( x ) = b i − a i G_i(x)=b_i-a_i Gi​(x)=bi​−ai​,且 H = F ⋅ G H=F \cdot G H=F⋅G,则式子可以被写作:

∑ i = 1 n ∣ H i ( x ) ∣ \sum_{i=1}^n |H_i(x)| i=1∑n​∣Hi​(x)∣

不难发现,当 b b b 变大 1 1 1 后, G 1 ( x ) G_1(x) G1​(x) 变大了 1 1 1,对于每个 [ 1 , n ] [1,n] [1,n] 中的 i i i 同时 H i ( x ) H_i(x) Hi​(x) 也变大了 μ ( i ) \mu(i) μ(i)。

先设定 b 1 = 0 b_1=0 b1​=0。定义一次函数 f i ( x ) = h i + μ ( i ) x f_i(x)=h_i+\mu(i)x fi​(x)=hi​+μ(i)x,那么一次查询的答案就是

∑ i = 1 n ∣ f i ( x ) ∣ \sum_{i=1}^n |f_i(x)| i=1∑n​∣fi​(x)∣

不难想到将询问离线下来并按 x x x 从小到大排序,然后考虑 1 , 2 , 3 , ⋯   , n 1,2,3,\cdots,n 1,2,3,⋯,n 对各个询问的贡献,每次先二分找到 f i ( x ) < 0 f_i(x)<0 fi​(x)<0 和 f i ( x ) ≥ 0 f_i(x) \ge 0 fi​(x)≥0 的分界点并差分进行贡献。

总复杂度 O ( ( n + q ) log ⁡ q ) O((n+q) \log q) O((n+q)logq),可以通过本题。

F

咕咕咕

Code

不想放了,自己写吧 /kel

标签:le,log,754,题解,sum,min,Codeforces,等价,xi
来源: https://blog.csdn.net/Cherrt/article/details/121309628