20200630 多项式难题训练

LOJ#6247. 九个太阳(单位根反演)

给定 n ≤ 1 0 15 , k ≤ 2 20 n\le10^{15},k\le2^{20} n1015,k220 k k k 是 2 的幂,求:
∑ k ∣ i , 0 ≤ i ≤ n ( n i ) \sum_{k|i,0\le i\le n}\binom ni ki,0in(in) 单位根反演

相当于就是求 f ( x ) = ∑ i = 0 n ( n i ) x i = ( x + 1 ) n f(x)=\sum_{i=0}^n \binom nix^i=(x+1)^n f(x)=i=0n(in)xi=(x+1)n k k k 的倍数项的系数和,单位根反演后等于 1 k ∑ j = 0 k − 1 f ( w j k ) = 1 k ∑ j = 0 k − 1 ( w j k + 1 ) n \frac 1k\sum\limits_{j=0}^{k-1}f(w_{j}^k)=\frac 1k\sum\limits_{j=0}^{k-1}(w_j^k+1)^n k1j=0k1f(wjk)=k1j=0k1(wjk+1)n

提交记录


LOJ#556. 「Antileaf’s Round」咱们去烧菜吧(多重背包乘积lnexp优化)

m m m 种物品,每种大小 a i a_i ai,数量 b i b_i bi,求装满大小为 k ∈ [ 1 , n ] k\in[1,n] k[1,n] 的背包的方案数。 b i = 0 b_i=0 bi=0 表示无限。 1 ≤ a i < 110000 , 0 ≤ b i ≤ 1 0 6 , 1 ≤ n , m ≤ 1 0 5 1\le a_i<110000,0\le b_i\le10^6,1\le n,m\le10^5 1ai<110000,0bi106,1n,m105

b i = 0 b_i=0 bi=0,有 F i = 1 1 − x a i F_i=\frac 1{1-x^{a_i}} Fi=1xai1;对 b i ≠ 0 b_i\neq 0 bi=0,有 F i = 1 − x a i ( b i + 1 ) 1 − x a i F_i={1-x^{a_i(b_i+1)}\over 1-x^{a_i}} Fi=1xai1xai(bi+1)

答案的生成函数 G = ∏ F i = exp ⁡ ∑ ln ⁡ F i G=\prod F_i=\exp\sum\ln F_i G=Fi=explnFi

ln ⁡ 1 − x a i ( b i + 1 ) 1 − x a i = ln ⁡ ( 1 − x a i ( b i + 1 ) ) − ln ⁡ ( 1 − x a i ) \ln{1-x^{a_i(b_i+1)}\over 1-x^{a_i}}=\ln (1-x^{a_i(b_i+1)})-\ln(1-x^{a_i}) ln1xai1xai(bi+1)=ln(1xai(bi+1))ln(1xai)

ln ⁡ ( 1 − x ) = ∑ i = 1 ∞ − 1 i x i \ln(1-x)=\sum_{i=1}^\infty-\frac 1ix^i ln(1x)=i=1i1xi,所以 ln ⁡ F i \ln F_i lnFi 是某些位置的倍数的形式,可以先求出每个位置的贡献和,然后 O ( n ln ⁡ n ) O(n\ln n) O(nlnn) 求出 ∑ ln ⁡ F i \sum\ln F_i lnFi

提交记录


CF1096G Lucky Tickets

多项式快速幂模板题,次数 k ≤ 9 k\le9 k9 n ≤ 1 0 5 n\le10^5 n105,可以求导递推,可以点值快速幂。


LOJ#6703. 小 Q 的序列(组合意义神题)

dalao题解
里面的 f i , Δ = f i − 1 , Δ − 1 + ( a i + i − Δ ) ∗ f i − 1 , Δ f_{i,\Delta}=f_{i-1,\Delta-1}+(a_i+i-\Delta)*f_{i-1,\Delta} fi,Δ=fi1,Δ1+(ai+iΔ)fi1,Δ
那么 f n , Δ f_{n,\Delta} fn,Δ 相当于是有 n − Δ n-\Delta nΔ 个数的贡献为 a i + i a_i+i ai+i,然后乘上按照 g i , j = g i − 1 , j − 1 − j ∗ g i − 1 , j g_{i,j}=g_{i-1,j-1}-j*g_{i-1,j} gi,j=gi1,j1jgi1,j 递推得到的 g n , Δ g_{n,\Delta} gn,Δ

g g g 很像第二类斯特林数·列(就是)

提交记录


AT2064 [AGC005F] Many Easy Problems

n n n个点的树,对每个 k k k,求任选 k k k个点,包含这 k k k个点的最小连通块大小之和。
n ≤ 200000 n\le200000 n200000

连通块边数=点数-1,考虑每条边对 a n s k ans_k ansk的贡献然后加上 ( n k ) \binom nk (kn)即可。

k k k个点,某条边 i i i在这个最小连通块中的方案数是 ( n k ) − ( s z k ) − ( n − s z k ) \binom nk-\binom {sz}k-\binom {n-sz}k (kn)(ksz)(knsz)

假设以1为根, a n s k = n ∗ ( n k ) − ( ∑ i = 2 n ( s z i k ) + ( n − s z i k ) ) ans_k=n*\binom nk-(\sum_{i=2}^n\binom {sz_i}k+\binom {n-sz_i}k) ansk=n(kn)(i=2n(kszi)+(knszi))

c n t i = ∑ [ s z j = = i ] + [ n − s z j = = i ] cnt_i=\sum[sz_j==i]+[n-sz_j==i] cnti=[szj==i]+[nszj==i],那么后面那个式子可以记为 f k = ∑ i = 1 n − 1 ( i k ) ∗ c n t i f_k=\sum_{i=1}^{n-1}\binom ik*cnt_i fk=i=1n1(ki)cnti
组合数拆开得到 f k ∗ k ! = ∑ i = 1 n − 1 i ! ⋅ c n t i ∗ 1 ( i − k ) ! f_k*k!=\sum_{i=1}^{n-1}i!\cdot cnt_i*\frac 1{(i-k)!} fkk!=i=1n1i!cnti(ik)!1。翻转后做卷积就可以了。

Code


LOJ#6055. 「from CommonAnts」一道数学题 加强版

在这里插入图片描述
在这里插入图片描述
LOJ讨论全局板块有题解
自述:
这是个前缀和的递推形式,可以将 ∑ i = 1 x − 2 f ( k , i ) \sum_{i=1}^{x-2}f(k,i) i=1x2f(k,i) f ( k , x − 1 ) − ( x − 1 ) k f(k,x-1)-(x-1)^k f(k,x1)(x1)k 表示。
那么 f ( k , x ) = 2 f ( k , x − 1 ) + x k − ( x − 1 ) k f(k,x)=2f(k,x-1)+x^k-(x-1)^{k} f(k,x)=2f(k,x1)+xk(x1)k
至少有一个关于 x x x k − 1 k-1 k1次多项式可以满足这个递推关系,但是不一定会有同时满足 f ( k , 1 ) = 1 f(k,1)=1 f(k,1)=1 k k k次多项式。

构造 g ( k , x ) = 2 g ( k , x − 1 ) − x k + x k − 1 g(k,x)=2g(k,x-1)-x^k+x^{k-1} g(k,x)=2g(k,x1)xk+xk1
那么 f ( k , x ) + g ( k , x ) = 2 ( f ( k , x − 1 ) + g ( k , x − 1 ) ) f(k,x)+g(k,x)=2(f(k,x-1)+g(k,x-1)) f(k,x)+g(k,x)=2(f(k,x1)+g(k,x1)),所以 f ( k , x ) = 2 x − 1 ( f ( k , 1 ) + g ( k , 1 ) ) − g ( k , x ) f(k,x)=2^{x-1}(f(k,1)+g(k,1))-g(k,x) f(k,x)=2x1(f(k,1)+g(k,1))g(k,x)

那么我们只需要找到一个满足 g g g 的递推关系的 k − 1 k-1 k1 次多项式,并求出 g ( k , 1 ) g(k,1) g(k,1) g ( k , x ) g(k,x) g(k,x)
可以设出 g ( k , 0 ) g(k,0) g(k,0),然后由递推关系推出 g ( k , 1... k ) g(k,1...k) g(k,1...k),此时可以插值求 g ( k , k ) g(k,k) g(k,k) 建立 g ( k , 0 ) g(k,0) g(k,0) 的等式从而求解。而LOJ的题解给出了这样一个恒等式: ∑ i = 0 k ( − 1 ) i ( k i ) g ( k , i ) = 0 \sum_{i=0}^k(-1)^i\binom kig(k,i)=0 i=0k(1)i(ik)g(k,i)=0
实际上,对任何 ≤ k − 1 \le k-1 k1次的多项式 F ( x ) F(x) F(x),都有 ∑ i = 0 k ( − 1 ) i ( k i ) F ( i ) = 0 \sum_{i=0}^{k}(-1)^i\binom kiF(i)=0 i=0k(1)i(ik)F(i)=0,具体证明可以将 x = − 1 x=-1 x=1 代入2020联合省选D1T2组合数问题中。
然后就解出了 g ( k , 0 ) g(k,0) g(k,0),递推 g ( k , 1... k − 1 ) g(k,1...k-1) g(k,1...k1),然后拉格朗日插值求出 g ( k , x ) g(k,x) g(k,x) 即可。
复杂度 O ( k ) O(k) O(k)

Code


LOJ#6609. 无意识的石子堆 加强版

n ∗ m n*m nm的棋盘,每行恰好放两个石子,每列最多放两个石子,求方案数。 n ≤ 2 ∗ 1 0 6 , m ≤ 1 0 18 n\le2*10^6,m\le10^{18} n2106,m1018

枚举放了两个石子的列的个数 k k k,记 S k S_k Sk 为恰有 k k k列放了两个石子的方案数,那么有:
A n s = ∑ k = 0 n ( m k ) ( m − k 2 n − 2 k ) S k Ans=\sum_{k=0}^n\binom mk\binom {m-k}{2n-2k}S_k Ans=k=0n(km)(2n2kmk)Sk
把行,列分别看做一排点,一个石子看做一条边,那么现在就是在二分图中求:左边有 n n n 个二度点,右边有 k k k 个二度点、 2 n − 2 k 2n-2k 2n2k 个一度点,连边的方案数。
把二度点拆成一度点,任意连边之后复原,可能会出现两个二度点连了重边的情况,枚举重边至少的条数进行容斥:
S k = 1 2 n + k ∑ i = 0 k ( − 1 ) i ( n i ) ( k i ) i ! 2 i ∗ ( 2 n − 2 i ) ! S_k=\frac 1{2^{n+k}}\sum_{i=0}^k(-1)^i\binom ni\binom kii!2^i*(2n-2i)! Sk=2n+k1i=0k(1)i(in)(ik)i!2i(2n2i)!
卷积一下就可以了。

Code


LOJ#6289. 花朵

n n n个点的数,每个点有权值 a i a_i ai,选出恰好 m m m 个不相邻的点,快乐度为权值之积,求所有方案的快乐度之和。

f [ u ] [ i ] [ 0 / 1 ] f[u][i][0/1] f[u][i][0/1] 表示 u u u 子树内选 i i i 个点, u u u 不选/选 的快乐度之和。
重链剖分,轻儿子分治NTT卷起来,重链按照轻儿子大小之和带权分治卷起来,要记录头尾有没有选。
分析一下复杂度:
卷轻儿子时,分治一个小log,总共log次作轻儿子,NTT一个log,复杂度 O ( n log ⁡ 3 n ) O(n\log^3n) O(nlog3n),前两个 log ⁡ \log log 比较小。分治卷积可以用堆也可以直接分治,不影响复杂度。
卷重链时,按照全局平衡二叉树的带权分治方法,总的深度是一个log的,NTT一个log,复杂度 O ( n log ⁡ 2 n ) O(n\log^2n) O(nlog2n)

说起来蛮简单,实际细节想不清根本下不了手
说起来轻儿子卷起来转移到父亲的时候整体移位总复杂度是 O ( n log ⁡ n ) O(n\log n) O(nlogn)
看完别人的代码(0.7h later)发现其实还是蛮简单的

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值