【UOJ#450】 【集训队作业2018】复读机
题目大意
\(n\)个不同的球放入\(k\)个不同的盒子里,每个盒子里的球数都是\(d\)的倍数,求方案数\(\%19491001\)的值
subtask1(5pts): \(d=1\)
subtask2(25pts): \(n\leq 10^3,k\leq 100\)
subtask3(30pts): \(n\leq 10^9,k\leq 5*10^5,d=2\)
subtask4(40pts): \(n\leq 10^9,k\leq 10^3,d=3\)
题解
\(O(nk)\)暴力dp:
\[f_{i,j}*(x*d)! -> f_{i+1,j+x*d}\\
ans=\frac{f_{k,n}}{n!}
\]
可以写成\(k\)个同样的多项式相乘(最后再除个\(n!\)),写出生成函数:
\[\begin{aligned}
F&=\sum_{i=0}^\infty [d|i] \frac{1}{i!} x^i\\
&=\sum_{i=0}^\infty \frac{1}{d}(\sum_{j=0}^{d-1} \omega_d^{ij}) \frac{x^i}{i!}\\
&=\frac{1}{d} \sum_{i=0}^{d-1} \sum_{j=0}^\infty (\omega_d^i)^j \frac{x^j}{j!}\\
&=\frac{1}{d} \sum_{i=0}^{d-1} e^{\omega_d^ix}\\
\end{aligned}
\]
求这个东西的\(k\)次方可以二(?)项式定理展开一下。
\[\begin{aligned}
F^k&=\frac{1}{d^k} \sum_{a_1+a_2+...a_d=k} \frac{k!\prod_{i=0}^{d-1} e^{a_i\omega_d^ix}}{\prod_{i=0}^{d-1} a_i!}\\
F^k&=\frac{1}{d^k} \sum_{\sum a_i=k} \frac{k! e^{x\sum_{i=0}^{d-1} a_i\omega_d^i}}{\prod a_i!}\\
d^kF^k&=\sum_{\sum a_i=k} \frac{k!\sum_{j=0}^\infty \frac{x^j}{j!} (\sum_{i=0}^{d-1} a_i\omega_d^i)^j}{\prod a_i!}\\
\frac{d^kF^k}{k!}&=\sum_{j=0}^\infty \frac{x^j}{j!} \sum_{\sum a_i=k} \frac{(\sum_{i=0}^{d-1} a_i\omega_d^i)^j}{\prod a_i!}\\
ans=\frac{F^k(n)}{n!}&=\frac{k!}{d^k} \sum_{\sum a_i=k} \frac{(\sum_{i=0}^{d-1} a_i\omega_d^{i})^n}{\prod a_i!}
\end{aligned}
\]
复杂度大约\(O(k^{d-1})\)
对于\(d=1\)
\[ans=k^n
\]
对于\(d=2\)
\[ans=\frac{k!}{2^k} \sum_{i=0}^k \frac{(2i-k)^n}{i!(k-i)!}
\]
对于\(d=3\)
\[ans=\frac{k!}{3^k} \sum_{i=0}^k \sum_{j=0}^{k-i} \frac{(\omega_3*i+\omega_3^2*j+k-i-j)^n}{i!j!(k-i-j)!}
\]
\(19491000\)是\(6\)的倍数,所以单位根存在。