20200630 多項式難題訓練

LOJ#6247. 九個太陽(單位根反演)

給定 n1015,k220n\le10^{15},k\le2^{20}kk 是 2 的冪,求:
ki,0in(ni)\sum_{k|i,0\le i\le n}\binom ni 單位根反演

相當於就是求 f(x)=i=0n(ni)xi=(x+1)nf(x)=\sum_{i=0}^n \binom nix^i=(x+1)^nkk 的倍數項的係數和,單位根反演後等於 1kj=0k1f(wjk)=1kj=0k1(wjk+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

提交記錄


LOJ#556. 「Antileaf’s Round」咱們去燒菜吧(多重揹包乘積lnexp優化)

mm 種物品,每種大小 aia_i,數量 bib_i,求裝滿大小爲 k[1,n]k\in[1,n] 的揹包的方案數。bi=0b_i=0 表示無限。1ai<110000,0bi106,1n,m1051\le a_i<110000,0\le b_i\le10^6,1\le n,m\le10^5

bi=0b_i=0,有 Fi=11xaiF_i=\frac 1{1-x^{a_i}};對 bi0b_i\neq 0,有 Fi=1xai(bi+1)1xaiF_i={1-x^{a_i(b_i+1)}\over 1-x^{a_i}}

答案的生成函數 G=Fi=explnFiG=\prod F_i=\exp\sum\ln F_i

ln1xai(bi+1)1xai=ln(1xai(bi+1))ln(1xai)\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})

ln(1x)=i=11ixi\ln(1-x)=\sum_{i=1}^\infty-\frac 1ix^i,所以 lnFi\ln F_i 是某些位置的倍數的形式,可以先求出每個位置的貢獻和,然後 O(nlnn)O(n\ln n) 求出 lnFi\sum\ln F_i

提交記錄


CF1096G Lucky Tickets

多項式快速冪模板題,次數k9k\le9n105n\le10^5,可以求導遞推,可以點值快速冪。


LOJ#6703. 小 Q 的序列(組合意義神題)

dalao題解
裏面的 fi,Δ=fi1,Δ1+(ai+iΔ)fi1,Δf_{i,\Delta}=f_{i-1,\Delta-1}+(a_i+i-\Delta)*f_{i-1,\Delta}
那麼 fn,Δf_{n,\Delta} 相當於是有 nΔn-\Delta 個數的貢獻爲 ai+ia_i+i,然後乘上按照 gi,j=gi1,j1jgi1,jg_{i,j}=g_{i-1,j-1}-j*g_{i-1,j} 遞推得到的 gn,Δg_{n,\Delta}

gg 很像第二類斯特林數·列(就是)

提交記錄


AT2064 [AGC005F] Many Easy Problems

nn個點的樹,對每個kk,求任選kk個點,包含這kk個點的最小連通塊大小之和。
n200000n\le200000

連通塊邊數=點數-1,考慮每條邊對anskans_k的貢獻然後加上(nk)\binom nk即可。

kk個點,某條邊ii在這個最小連通塊中的方案數是 (nk)(szk)(nszk)\binom nk-\binom {sz}k-\binom {n-sz}k

假設以1爲根, ansk=n(nk)(i=2n(szik)+(nszik))ans_k=n*\binom nk-(\sum_{i=2}^n\binom {sz_i}k+\binom {n-sz_i}k)

cnti=[szj==i]+[nszj==i]cnt_i=\sum[sz_j==i]+[n-sz_j==i],那麼後面那個式子可以記爲 fk=i=1n1(ik)cntif_k=\sum_{i=1}^{n-1}\binom ik*cnt_i
組合數拆開得到 fkk!=i=1n1i!cnti1(ik)!f_k*k!=\sum_{i=1}^{n-1}i!\cdot cnt_i*\frac 1{(i-k)!}。翻轉後做卷積就可以了。

Code


LOJ#6055. 「from CommonAnts」一道數學題 加強版

在這裏插入圖片描述
在這裏插入圖片描述
LOJ討論全局板塊有題解
自述:
這是個前綴和的遞推形式,可以將 i=1x2f(k,i)\sum_{i=1}^{x-2}f(k,i)f(k,x1)(x1)kf(k,x-1)-(x-1)^k 表示。
那麼f(k,x)=2f(k,x1)+xk(x1)kf(k,x)=2f(k,x-1)+x^k-(x-1)^{k}
至少有一個關於xxk1k-1次多項式可以滿足這個遞推關係,但是不一定會有同時滿足 f(k,1)=1f(k,1)=1kk次多項式。

構造g(k,x)=2g(k,x1)xk+xk1g(k,x)=2g(k,x-1)-x^k+x^{k-1}
那麼 f(k,x)+g(k,x)=2(f(k,x1)+g(k,x1))f(k,x)+g(k,x)=2(f(k,x-1)+g(k,x-1)),所以f(k,x)=2x1(f(k,1)+g(k,1))g(k,x)f(k,x)=2^{x-1}(f(k,1)+g(k,1))-g(k,x)

那麼我們只需要找到一個滿足 gg 的遞推關係的 k1k-1 次多項式,並求出 g(k,1)g(k,1)g(k,x)g(k,x)
可以設出 g(k,0)g(k,0),然後由遞推關係推出 g(k,1...k)g(k,1...k),此時可以插值求 g(k,k)g(k,k) 建立 g(k,0)g(k,0) 的等式從而求解。而LOJ的題解給出了這樣一個恆等式:i=0k(1)i(ki)g(k,i)=0\sum_{i=0}^k(-1)^i\binom kig(k,i)=0
實際上,對任何k1\le k-1次的多項式 F(x)F(x),都有 i=0k(1)i(ki)F(i)=0\sum_{i=0}^{k}(-1)^i\binom kiF(i)=0,具體證明可以將 x=1x=-1 代入2020聯合省選D1T2組合數問題中。
然後就解出了 g(k,0)g(k,0),遞推 g(k,1...k1)g(k,1...k-1),然後拉格朗日插值求出 g(k,x)g(k,x) 即可。
複雜度 O(k)O(k)

Code


LOJ#6609. 無意識的石子堆 加強版

nmn*m的棋盤,每行恰好放兩個石子,每列最多放兩個石子,求方案數。n2106,m1018n\le2*10^6,m\le10^{18}

枚舉放了兩個石子的列的個數 kk,記 SkS_k 爲恰有kk列放了兩個石子的方案數,那麼有:
Ans=k=0n(mk)(mk2n2k)SkAns=\sum_{k=0}^n\binom mk\binom {m-k}{2n-2k}S_k
把行,列分別看做一排點,一個石子看做一條邊,那麼現在就是在二分圖中求:左邊有 nn 個二度點,右邊有 kk 個二度點、2n2k2n-2k 個一度點,連邊的方案數。
把二度點拆成一度點,任意連邊之後復原,可能會出現兩個二度點連了重邊的情況,枚舉重邊至少的條數進行容斥:
Sk=12n+ki=0k(1)i(ni)(ki)i!2i(2n2i)!S_k=\frac 1{2^{n+k}}\sum_{i=0}^k(-1)^i\binom ni\binom kii!2^i*(2n-2i)!
卷積一下就可以了。

Code


LOJ#6289. 花朵

nn個點的數,每個點有權值 aia_i,選出恰好 mm 個不相鄰的點,快樂度爲權值之積,求所有方案的快樂度之和。

f[u][i][0/1]f[u][i][0/1] 表示 uu 子樹內選 ii 個點,uu 不選/選 的快樂度之和。
重鏈剖分,輕兒子分治NTT捲起來,重鏈按照輕兒子大小之和帶權分治捲起來,要記錄頭尾有沒有選。
分析一下複雜度:
卷輕兒子時,分治一個小log,總共log次作輕兒子,NTT一個log,複雜度 O(nlog3n)O(n\log^3n),前兩個 log\log 比較小。分治卷積可以用堆也可以直接分治,不影響複雜度。
卷重鏈時,按照全局平衡二叉樹的帶權分治方法,總的深度是一個log的,NTT一個log,複雜度 O(nlog2n)O(n\log^2n)

說起來蠻簡單,實際細節想不清根本下不了手
說起來輕兒子捲起來轉移到父親的時候整體移位總複雜度是O(nlogn)O(n\log n)
看完別人的代碼(0.7h later)發現其實還是蠻簡單的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章