Codeforces Round #726 A~F

Codeforces Round #726 A~F
by CarolusRex

A. Arithmetic Array

点点点

B. Bad Boy

点点点

C. Challenging Cliffs

点点点

D. Deleting Divisors

题意:
t ( 1 ⩽ t ⩽ 1 0 4 ) t \left(1\leqslant t\leqslant 10^4\right) t(1t104)组数据,每组数据给定一个数 n ( 1 ⩽ n ⩽ 1 0 9 ) n \left(1\leqslant n\leqslant 10^9\right) n(1n109)
AliceBob依次对当前数进行操作,操作为减去当前数 n n n的一个因子(非1、非 n n n)。最后一个不能操作的为负。

题解:
记数 i i i的先手胜利态为 f [ i ] f[i] f[i],则 f [ i ] f[i] f[i]的胜利态可以从 f [ i − f a c t o r ( i ) ] f[i-factor(i)] f[ifactor(i)]推导出来。令 f [ i ] = A l i c e f[i] = Alice f[i]=Alice为先手胜, f [ i ] = B o b f[i] = Bob f[i]=Bob为先手负。则当 ∀ f [ i − f a c t o r ( i ) ] = A l i c e \forall f[i - factor(i)] = Alice f[ifactor(i)]=Alice时, f [ i ] = B o b f[i] = Bob f[i]=Bob;当 ∃ f [ i − f a c t o r ( i ) ] = B o b \exists f[i - factor(i)] = Bob f[ifactor(i)]=Bob时, f [ i ] = A l i c e f[i] = Alice f[i]=Alice。解释如下,如果所有下一步操作都是先手胜,则当前操作的后手胜;如果存在下一步操作后手胜,则当前操作先手胜。
有了如上推导,我们可以先模拟前32的结果。在这里插入图片描述
观察可以发现,基本符合奇数为 B o b Bob Bob,偶数为 A l i c e Alice Alice 2 n 2^n 2n为特例。我们可以用归纳法证明如上结论。对奇数 p p p,其所有子状态 p − f a c t o r ( p ) p-factor(p) pfactor(p)都是偶数;对 p ⋅ 2 n ( p ≠ 1 ) p\cdot 2^n(p \neq 1) p2n(p=1),存在 p ⋅ 2 n − p = p ⋅ ( 2 n − 1 ) p\cdot 2^n - p = p \cdot (2^n - 1) p2np=p(2n1)为奇数。对 2 n 2^n 2n,子状态为 2 n − 2 m ( m < n ) 2^n - 2^m (m < n) 2n2m(m<n),当 m < n − 1 m < n - 1 m<n1时,如上证明;当 m = n − 1 m = n - 1 m=n1时,取决于 2 n − 2 m = 2 m 2^n - 2^m = 2^m 2n2m=2m,即要考虑 n n n的奇偶性。

E1. Erase and Extend (Easy Version)

题意:
给定一个字符串 s s s,有两种操作。1. s = s + s;2. 删去最后一位。求经过若干次操作后的最小字典序字符串。给定字符串长度为 n n n,所求字符串长度为 k k k
n , k ( 1 ⩽ n , k ⩽ 5 ⋅ 1 0 3 ) n, k \left(1\leqslant n, k\leqslant 5 \cdot 10^3\right) n,k(1n,k5103)

题解:
如下。

E2. Erase and Extend (Hard Version)

题意:
如上。
n , k ( 1 ⩽ n , k ⩽ 5 ⋅ 1 0 5 ) n, k \left(1\leqslant n, k\leqslant 5 \cdot 10^5\right) n,k(1n,k5105)

题解:
贪心。对于一个字符串 s s s,操作1后的任意操作2不会影响 s s s长度 l e n len len之前的最优解;单独操作2也不会。所以答案是前缀字符串的重复。
记下标 i i i之前的最优前缀字符串为 s 0 s_0 s0,则只需要比较当前小于 s 0 s_0 s0内相应位置,则当前字符串更优,更新 s 0 s_0 s0;若相等,则之后可能存在更优解;若大于,则 s 0 s_0 s0已经最优。

F. Figure Fixing

题意:
t ( 1 ⩽ t ⩽ 1 0 3 ) t \left(1\leqslant t\leqslant 10^3\right) t(1t103)组数据,每组数据给定 n ( 1 ⩽ n ⩽ 2 ⋅ 1 0 5 ) n \left(1\leqslant n\leqslant 2 \cdot 10^5\right) n(1n2105)个点 m ( n − 1 ⩽ m ⩽ m i n ( 2 ⋅ 1 0 5 , n ( n − 1 ) 2 ) ) m \left(n - 1\leqslant m\leqslant min(2 \cdot 10^5, \frac{n(n - 1)}{2})\right) m(n1mmin(2105,2n(n1)))条边的无向连通图,每个点有初始值 v v v和目标值 t t t。操作如下,对一条边 e d g e edge edge的两个点 p , q p, q p,q,可以加上一个相同值(任意值,可以为负)。问是否存在有限操作,使得每个点的值都变为目标值。

题解:
二分图。
一个显然的判断是初始值和与目标值和的奇偶性。
如果是二分图,那么每个操作都对两个集合的点加上了相同值,则每个集合的和变化相同,那么只有在原来的和(差值)相同的情况下,才成立。下证在这种情况下,存在有限操作。 不会证。 如果非要证,猜一手递归或者矩阵。证明见update F

如果不是二分图,则可以对一个集合的值改变偶数的差异,变成二分图问题,判断奇偶性即可。

update:

F

证明如下:
已知是连通图,先找割边。去掉割边后,可以看做是两个独立的子问题,且有 s u m 11 + s u m 12 + d i f i = s u m 21 + s u m 22 + d i f j sum_{11} + sum_{12} + dif_i = sum_{21} + sum_{22} + dif_j sum11+sum12+difi=sum21+sum22+difj i i i是连通 s u m 11 , s u m 21 sum_{11}, sum_{21} sum11,sum21的点, j j j是连通 s u m 12 , s u m 22 sum_{12}, sum_{22} sum12,sum22的点。那么对 s u m 21 , d i f i sum_{21}, dif_i sum21,difi加上 s u m 11 − s u m 21 sum_{11} - sum_{21} sum11sum21,对 s u m 12 , d i f j sum_{12}, dif_j sum12,difj加上 s u m 22 − s u m 12 sum_{22} - sum_{12} sum22sum12,则更新后的 s u m 11 = s u m 21 , s u m 12 = s u m 22 sum_{11} = sum_{21}, sum_{12} = sum_{22} sum11=sum21,sum12=sum22 d i f i + s u m 11 − s u m 21 = d i f j + s u m 22 − s u m 12 dif_i + sum_{11} - sum_{21} = dif_j + sum_{22} - sum_{12} difi+sum11sum21=difj+sum22sum12(次式为更新前的值),符合前式,可减去共同值,符合题意。
如果不存在割边,则去掉任意边后,仍为连通图。
重复上述操作,即可找到符合题意的有限操作。

code

https://github.com/cfuser/codeforces

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值