#3027. [Ceoi2004]Sweet 生成函数 + 组合数学
傳送門
文章目錄
- 題意:
- 思路:
題意:
思路:
這個題顯然可以容斥來寫,剛學生成函數就來水一下。
對于每一堆iii我們寫出其生成函數Fi(x)=∑k=0mi(1+x+x2+...+xmi)=1?x1+mi1?xF_i(x)=\sum_{k=0}^{m_i}(1+x+x^2+...+x^{m_i})=\frac{1-x^{1+m_i}}{1-x}Fi?(x)=∑k=0mi??(1+x+x2+...+xmi?)=1?x1?x1+mi??,那么將所有堆的生成函數乘起來即G(x)=∏i=1nFi(x)=∏i=1n1?x1+mi1?x=(1?x)?n?∏i=1n(1?x1+mi)G(x)=\prod_{i=1}^nF_i(x)=\prod_{i=1}^n \frac{1-x^{1+m_i}}{1-x}=(1-x)^{-n}*\prod_{i=1}^n(1-x^{1+m_i})G(x)=∏i=1n?Fi?(x)=∏i=1n?1?x1?x1+mi??=(1?x)?n?∏i=1n?(1?x1+mi?),對于后面的這項,由于nnn很小,所以展開最多只有2n2^n2n項,直接暴力展開即可。
對于前面的,我們用牛頓二項式定理展開(1?x)?n=∑i≥0(n+i?1i)xi(1-x)^{-n}=\sum_{i\ge0}\binom{n+i-1}{i}x^i(1?x)?n=∑i≥0?(in+i?1?)xi,可以得到對應的xxx項的系數,所以我們直接枚舉∏i=1n(1?x1+mi)\prod_{i=1}^n(1-x^{1+m_i})∏i=1n?(1?x1+mi?)展開之后的指數為kkk的系數tkt_ktk?,讓后計算前面的項對答案的貢獻,即tk?∑i=a?kb?k(n?1?ii)t_k*\sum_{i=a-k}^{b-k}\binom{n-1-i}{i}tk??∑i=a?kb?k?(in?1?i?),考慮將其轉換成一個前綴和的形式,考慮到有∑i=0k(n?1+ii)=(n+kn)\sum_{i=0}^k\binom{n-1+i}{i}=\binom{n+k}{n}∑i=0k?(in?1+i?)=(nn+k?),所以對上面式子進行化簡ck?((n+b?kb?k)?(n+a?k?1a?k?1))c_k*(\binom{n+b-k}{b-k}-\binom{n+a-k-1}{a-k-1})ck??((b?kn+b?k?)?(a?k?1n+a?k?1?)),其實到這里應該就已經結束了,直接枚舉2k2^k2k個ckc_kck?讓后直接得到答案即可。但是這個題模數不是個質數,而且組合數很大,所以考慮將其轉換為ck?((n+b?kn)?(n+a?k?1n))c_k*(\binom{n+b-k}{n}-\binom{n+a-k-1}{n})ck??((nn+b?k?)?(nn+a?k?1?)),這樣最多只有nnn項,且分母是n!n!n!,我們將模數乘上n!n!n!,在計算組合數的時候將其模上即可,這樣就可避免組合數過大。
調了半天,代碼很丑。。
總結
以上是生活随笔為你收集整理的#3027. [Ceoi2004]Sweet 生成函数 + 组合数学的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 桑叶葛根和山楂一起泡水喝的功效与作用、禁
- 下一篇: #3771. Triple 生成函数 +