Codechef July Challenge 简要题解

代码可以看 l d x ldx ldx 的,反正我都是抄的他的 传送门

Missing a Point

把出现次数为奇数的行列找出来

Chefina and Swaps

贪心,注意可以将一个很小的换过来再换回去

Doctor Chef

注意到我们的策略就是不断把 X X X 搞成最大值,中途顺便搞定一些国家
没有搞定的国家可以通过一次操作搞定
考虑这么一个 D P DP DP d p i dp_i dpi 表示 i . . . n i...n i...n 的贡献最小值(其中没有搞定的有 1 的贡献)
d p i = min ⁡ d p j + t i m e s ( i , j ) + j − i − 1 dp_i=\min dp_j+times(i,j)+j-i-1 dpi=mindpj+times(i,j)+ji1
注意到并不需要对每个 j j j 转移,我们枚举 a i ∗ 2 k a_i*2^k ai2k,那么一定会选择 a j ≤ a_j\le aj 它的最大的 j j j
O ( n log ⁡ 2 n ) O(n\log^2n) O(nlog2n)

LCM Constraints

分析一下发现,一个点要么选择出边的最小值,要么 < < < 最小值
暴力 2 n 2^n 2n 搜索,考虑折半,将两边搜出来
考虑一边的状态为 S S S,另一边相当于是钦定一些点选择最小值
那么就是要统计其超集的贡献,做子集卷积即可

Expected Repetitions

考虑枚举一个串 S i . . . j S_{i...j} Si...j 以及它的周期 S i . . . t S_{i...t} Si...t
需要满足 l c p ( i , t ) ≥ j − t + 1 lcp(i,t)\ge j-t+1 lcp(i,t)jt+1,我们发现可以枚举 S i . . . t − 1 S_{i...t-1} Si...t1,它的贡献是 v a l u e ( i , t − 1 ) ∗ l c p ( i , t ) value(i,t-1)*lcp(i,t) value(i,t1)lcp(i,t)
拆成前缀和 A n s = ∑ i ∑ j > i l c p ( i , j ) ∗ ( s u m j − 1 − s u m i − 1 ) Ans=\sum_{i}\sum_{j>i}lcp(i,j)*(sum_{j-1}-sum_{i-1}) Ans=ij>ilcp(i,j)(sumj1sumi1)
注意到我们只需要统计 f t = ∑ i < t l c p ( i , t ) f_t=\sum_{ift=i<tlcp(i,t) 以及 g t = ∑ i > t l c p ( t , i ) g_t=\sum_{i>t}lcp(t,i) gt=i>tlcp(t,i)
我们用 S A M SAM SAM,线段树合并的时候把贡献算上即可

Weird Product

我们算出 ( − 1 ) n ( n + 1 ) 2 ∏ i ≠ j S i − S j (-1)^{\frac{n(n+1)}{2}}\prod_{i\neq j} S_i-S_j (1)2n(n+1)i=jSiSj,最后除以 X X X
这个形式可以构造 ∏ ( S i − S j ) S i − S i = ( ∏ ( x − S i ) ) ′ ∣ x = S i \frac{\prod (S_i-S_j)}{S_i-S_i}=(\prod (x-S_i))'\Big|_{x=S_i} SiSi(SiSj)=((xSi))x=Si

Expected Spanning Trees

考虑对每条边构造 EGF,分别是 e x − e − x 2 , e x + e − x 2 \frac{e^x-e^{-x}}{2},\frac{e^x+e^{-x}}{2} 2exex,2ex+ex
对于生成树上的边,我们用矩阵树定理,将其放在行列式中计算
对于不在生成树上的边,我们有 e ( n − 1 ) ( n − 2 ) 2 x e^{\frac{(n-1)(n-2)}{2}x} e2(n1)(n2)x 的贡献
z = e x z=e^x z=ex,可以将行列式插值出来 O ( n 4 ) O(n^4) O(n4),最后是
[ x T ] T ! ∗ e ( n − 1 ) ( n − 2 ) 2 x ∑ i c o e f i ∗ e i x [x^T]T!*e^{\frac{(n-1)(n-2)}{2}x}\sum_i coef_i*e^{ix} [xT]T!e2(n1)(n2)xicoefieix,可以 O ( n log ⁡ P ) O(n\log P) O(nlogP) 计算

Easy Geo xD

a n s = ∑ i = 0 n ∑ j = 0 m [ a i + b j ≡ d m o d    c ] ans =\sum_{i=0}^n\sum_{j=0}^m[ai+bj\equiv d\mod c] ans=i=0nj=0m[ai+bjdmodc]
a = c − a a=c-a a=ca,考虑 枚举 i i i,并令 e = gcd ⁡ ( b , c ) e=\gcd (b,c) e=gcd(b,c),并将 b , c b,c b,c 除去 e e e
那么问题变成求 j ∈ [ 0 , m ] , j ≡ b − 1 ( d + a i ) e m o d    c j\in[0,m],j\equiv b^{-1}\frac{(d+ai)}{e}\mod c j[0,m],jb1e(d+ai)modc
t = b − 1 ( d + a i ) e m o d    c t=b^{-1}\frac{(d+ai)}{e}\mod c t=b1e(d+ai)modc,那么个数即为 ⌊ m − t c ⌋ = ⌊ m c ⌋ + [ m m o d    c ≥ t ] \lfloor\frac{m-t}{c}\rfloor=\lfloor\frac{m}{c}\rfloor+[m\mod c\ge t] cmt=cm+[mmodct]
那么就是算(令 M = m m o d    c M=m\mod c M=mmodc
⌊ m c ⌋ ∑ i = 1 n [ e ∣ a i + d ] + ∑ i = 1 n [ e ∣ a i + d ] [ b − 1 ( d + a i ) e m o d    c ≤ M ] \lfloor\frac{m}{c}\rfloor\sum_{i=1}^n[e|ai+d]+\sum_{i=1}^n[e|ai+d][b^{-1}\frac{(d+ai)}{e}\mod c\le M] cmi=1n[eai+d]+i=1n[eai+d][b1e(d+ai)modcM]
前面就是 ∑ i = 0 n [ a i ≡ − d m o d    e ] \sum_{i=0}^n[ai\equiv -d\mod e] i=0n[aidmode],可以解方程得到(令 g = gcd ⁡ ( a , c ) g=\gcd (a,c) g=gcd(a,c) a , d , e a,d,e a,d,e 同除 g g g
考虑最小解 i = z i=z i=z,以及 t = b − 1 ( d + a z ) e t=b^{-1}\frac{(d+az)}{e} t=b1e(d+az),令 a = a ∗ b − 1 a=a*b^{-1} a=ab1
那么之后的解就是 t , t + a , t + 2 a … t,t+a,t+2a\dots t,t+a,t+2a,令 c t = ⌊ n e ⌋ + [ n m o d    e ≥ z ] ct=\lfloor\frac{n}{e}\rfloor+[n\mod e\ge z] ct=en+[nmodez]
∑ i = 0 c t − 1 [ a i + t m o d    c ≤ R ] = ∑ i = 0 c t − 1 ⌊ a i + t c ⌋ − ⌊ a i + t − R − 1 c ⌋ \sum_{i=0}^{ct-1}[ai+t\mod c\le R]=\sum_{i=0}^{ct-1}\lfloor\frac{ai+t}{c}\rfloor-\lfloor\frac{ai+t-R-1}{c}\rfloor i=0ct1[ai+tmodcR]=i=0ct1cai+tcai+tR1
用类欧几里得解决

你可能感兴趣的:(FSY的好题汇总)