代码可以看 l d x ldx ldx 的,反正我都是抄的他的 传送门
把出现次数为奇数的行列找出来
贪心,注意可以将一个很小的换过来再换回去
注意到我们的策略就是不断把 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)+j−i−1
注意到并不需要对每个 j j j 转移,我们枚举 a i ∗ 2 k a_i*2^k ai∗2k,那么一定会选择 a j ≤ a_j\le aj≤ 它的最大的 j j j
O ( n log 2 n ) O(n\log^2n) O(nlog2n)
分析一下发现,一个点要么选择出边的最小值,要么 < < < 最小值
暴力 2 n 2^n 2n 搜索,考虑折半,将两边搜出来
考虑一边的状态为 S S S,另一边相当于是钦定一些点选择最小值
那么就是要统计其超集的贡献,做子集卷积即可
考虑枚举一个串 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)≥j−t+1,我们发现可以枚举 S i . . . t − 1 S_{i...t-1} Si...t−1,它的贡献是 v a l u e ( i , t − 1 ) ∗ l c p ( i , t ) value(i,t-1)*lcp(i,t) value(i,t−1)∗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=∑i∑j>ilcp(i,j)∗(sumj−1−sumi−1)
注意到我们只需要统计 f t = ∑ i < t l c p ( i , t ) f_t=\sum_{i
我们用 S A M SAM SAM,线段树合并的时候把贡献算上即可
我们算出 ( − 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=jSi−Sj,最后除以 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} Si−Si∏(Si−Sj)=(∏(x−Si))′∣∣∣x=Si
考虑对每条边构造 EGF,分别是 e x − e − x 2 , e x + e − x 2 \frac{e^x-e^{-x}}{2},\frac{e^x+e^{-x}}{2} 2ex−e−x,2ex+e−x
对于生成树上的边,我们用矩阵树定理,将其放在行列式中计算
对于不在生成树上的边,我们有 e ( n − 1 ) ( n − 2 ) 2 x e^{\frac{(n-1)(n-2)}{2}x} e2(n−1)(n−2)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(n−1)(n−2)x∑icoefi∗eix,可以 O ( n log P ) O(n\log P) O(nlogP) 计算
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=0n∑j=0m[ai+bj≡dmodc]
令 a = c − a a=c-a a=c−a,考虑 枚举 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],j≡b−1e(d+ai)modc
令 t = b − 1 ( d + a i ) e m o d c t=b^{-1}\frac{(d+ai)}{e}\mod c t=b−1e(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] ⌊cm−t⌋=⌊cm⌋+[mmodc≥t]
那么就是算(令 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] ⌊cm⌋i=1∑n[e∣ai+d]+i=1∑n[e∣ai+d][b−1e(d+ai)modc≤M]
前面就是 ∑ i = 0 n [ a i ≡ − d m o d e ] \sum_{i=0}^n[ai\equiv -d\mod e] ∑i=0n[ai≡−dmode],可以解方程得到(令 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=b−1e(d+az),令 a = a ∗ b − 1 a=a*b^{-1} a=a∗b−1
那么之后的解就是 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⌋+[nmode≥z]
∑ 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=0ct−1[ai+tmodc≤R]=∑i=0ct−1⌊cai+t⌋−⌊cai+t−R−1⌋
用类欧几里得解决