【UOJ#450】 【集训队作业2018】复读机

题目大意

(n)个不同的球放入(k)个不同的盒子里,每个盒子里的球数都是(d)的倍数,求方案数(\%19491001)的值
subtask1(5pts): (d=1)
subtask2(25pts): (nleq 10^3,kleq 100)
subtask3(30pts): (nleq 10^9,kleq 5*10^5,d=2)
subtask4(40pts): (nleq 10^9,kleq 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!)),写出生成函数:

[egin{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)次方可以二(?)项式定理展开一下。

[egin{aligned} F^k&=frac{1}{d^k} sum_{a_1+a_2+...a_d=k} frac{k!prod_{i=0}^{d-1} e^{a_iomega_d^ix}}{prod_{i=0}^{d-1} a_i!}\ F^k&=frac{1}{d^k} sum_{sum a_i=k} frac{k! e^{xsum_{i=0}^{d-1} a_iomega_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_iomega_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_iomega_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_iomega_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)的倍数,所以单位根存在。

原文地址:https://www.cnblogs.com/zzqtxdy/p/12043756.html