LOJ3120 CTS2019 珍珠 生成函數、二項式反演、NTT


傳送門

題目大意:給出一個長度為\(n\)的序列\(a_i\),序列中每一個數可以取\(1\)\(D\)中的所有數。問共有多少個序列滿足:設\(p_i\)表示第\(i\)個數在序列中出現的次數,\(\sum\limits_{i=1}^D \lfloor \frac{p_i}{2} \rfloor \geq m\)\(D \leq 10^5 , 0 \leq m \leq n \leq 10^9\)


在有生之年切掉laofu的多項式題,全場唯一一個寫多項式求逆的,其他人都直接卷積,然后發現自己的做法其實並不需要多項式求逆……

首先上面的條件等價於:\(\sum\limits_{i=1}^D [2 \not\mid p_i] \leq n - 2m\)。那么一種想法是求出強制其中\(n - 2m + 1\)個數字出現次數為奇數,其他的數出現次數為偶數。那么這樣的方案數是\(\binom{D}{n - 2m + 1} [x^n](\frac{e^x - e^{-x}}{2})^{n - 2m + 1} (\frac{e^x + e^{-x}}{2})^{D - (n - 2m + 1)}\),非常難算。不妨考慮容斥計算。

先做幾個特判:\(n < 2m\)時答案為\(0\)\(D < n - 2m + 1\)時答案為\(D^n\)

不妨設\(f_i\)表示強制其中\(i\)個數字出現次數為奇數,其他的數出現次數隨意的方案數,那么\(f_i = \binom{D}{i} [x^n](\frac{e^x - e^{-x}}{2})^{i} e^{(D - i)x}\),經過化簡可以得到\(f_i = i! \binom{D}{i} \frac{1}{2^i} \sum\limits_{j=0}^i \frac{(-1)^j (D - 2j)^n}{(i-j)!j!}\)。不難發現后面是一個卷積形式,使用\(NTT\)\(O(DlogD)\)的時間復雜度內可以求出所有的\(f_i\)

然后又設\(g_i\)表示恰好\(i\)個數字出現奇數次的方案數,就和HAOI2018 染色一樣用NTT加速二項式反演即可。

最后答案就是\(\sum\limits_{i=0}^{n - 2m} g_i\)

代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM