題目大意:給出一個長度為\(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\)。