題面傳送門
唉,不會生成函式。
考慮一種出現次數為 \(x\) 的數,它可以被分到其中一邊,也可以兩邊同時分。前者會有 \(1\) 的係數,後者會有 \(2^x-2\) 的係數。
用生成函式來刻畫,則一種出現次數為 \(c\) 的數的 GF 為 \(x+\frac{1}{x}+2^c-2\),而我們要求的就是所有出現過的數的 GF 乘起來以後 \(0\) 次項的係數。
將上面的 GF 進一步改寫為 \(((\sqrt x-\frac{1}{\sqrt x})^2+2^c)\),則設 \(z=(\sqrt x-\frac{1}{\sqrt x})^2\),可以寫出一個 DP,記 \(f_i\) 表示有 \(i\) 個沒有選 \(z\),由於模數的特殊性質,\(i\leq 64\)。使用莫隊可以做到 \(O(n\sqrt q\log p)\)。
但是這還不夠優。使用莫隊求出出現次數為 \(i\) 的數有幾種後,按照出現次數從大到小進行這個 DP。當考慮到出現次數為 \(i\) 的數的時候, \(dp\) 的狀態數不超過 \(\frac{\log p}{i}\),因此 dp 的複雜度就是 \(\sum \frac{\log ^2p}{i^2}=O(\log ^2p)\),總複雜度就是 \(O(n\sqrt q+q\log ^2p)\)。
submission