「联合省选 2020 A」组合数问题
「联合省选 2020 A」组合数问题
题意:
求$\begin{aligned}\sum _{k=0}^nf(k)\cdot x^k\cdot C(n,k)\end{aligned}$
显然要对于$f(k)$的每一项考虑,第$i$项的贡献
$a_i\begin{aligned}\sum _{k=0}^nk^i\cdot x^k\cdot C(n,k)\end{aligned}$通用的$O(m^2)$
后面的这个式子,考虑它的组合意义,假设当前有$n$个格子,每个格子被染了$[0,x]$的颜色
$x^k\cdot C(n,k)$即枚举有$k$个格子涂了$[1,x]$的颜色,剩下涂了$0$的颜色
$k^i$的组合意义即可重复地选了$i$次,每次选出的都是在$[1,x]$颜色的格子的方案数
那么问题可以转化为强制每一次被访问的格子都是$[1,x]$,其他的格子随便涂$[0,x]$
问题在于每次被访问的格子会重复,于是可以想到一个简单的转化,求出$i$次访问了$j$不同位置的方案数
即斯特林数$S(i,j)$,可以得到的是
$\begin{aligned}\sum _{k=0}^nk^i\cdot x^k\cdot C(n,k)=\sum_{j=0}^iS(i,j)\cdot \frac{n!} {(n-j)!}\cdot x^j(x+1)^{n-j}\end{aligned}$实际上可以在$O(m^2)$递推斯特林数时就把$\frac{n!} {(n-j)!}$加入权值,$x^j(x+1)^{n-j}$可以预处理出来
因此总复杂度就是$O(m^2)$
1 |
|
特殊的$O(m\log^2 m)$
(注意以下仅限于口胡!)
假设可以把$f(k)$转化为下降幂多项式,依然枚举每一项考虑,那么每次要求的就是
$\begin{aligned}\sum _{k=0}^nk^{\underline i}\cdot x^k\cdot C(n,k)=i!\sum _{k=0}^nC(k,i)\cdot x^k\cdot C(n,k)\end{aligned}$依然考虑组合意义
$x^k\cdot C(n,k)$即枚举有$k$个格子涂了$[1,x]$的颜色,剩下涂了$0$的颜色
$C(k,i)$的组合意义不可重复地选了$i$次,每次选出的都是在$[1,x]$颜色的格子的方案数
那么问题可以转化为强制每一次被访问的格子都是$[1,x]$,其他的格子随便涂$[0,x]$
$\begin{aligned}\sum _{k=0}^nk^{\underline i}\cdot x^k\cdot C(n,k)=i!\cdot C(n,i)\cdot x^i\cdot (x+1)^{n-i}\end{aligned}$ (式子应该没有问题,但是下面都是口胡)
求解下降幂多项式需要多点求值,还要求很多逆元
然而对于非质数的$P$,我们求不出$i!$的逆元
(比较智障的搞法就是每次乘法都存下$P$的每个质因数个数,这样,做乘法的复杂度是$\log P$,但是不知道最后做出的答案是不是能保证因数个数$\ge 0$)
对于$P$为质数的情况,用$\text{MTT}$做多项式转下降幂多项式的复杂度是$O(m\log^2 m)$
(听说用转置原理优化的多点求值已经可以跑$10^6$啦?)