洛谷 P4705 玩游戏

本文分析了一种高效的算法,用于求解两个序列中元素组合的幂次和问题。通过运用二项式定理和生成函数,将问题转化为卷积形式,并提出使用分治FFT的方法在O(nlog^2n)的时间复杂度内计算关键中间结果。最后,文章介绍了如何通过求导、求对数等操作得到最终答案。

题目分析

题目要求的是:
\[ \sum_{i=1}^n\sum_{j=1}^m(a_i+b_j)^x(x\in [1,T]) \]

利用二项式定理化式子,
\[ \begin{aligned} &\sum_{i=1}^n\sum_{j=1}^m(a_i+b_j)^x\\ =&\sum_{i=1}^n\sum_{j=1}^m\sum_{k=0}^x\binom{x}{k}a_i^kb_j^{x-k}\\ =&x!\sum_{i=1}^n\sum_{j=1}^m\sum_{k=0}^x\frac{a_i^k}{k!}\frac{b_j^{x-k}}{(x-k)!}\\ =&x!\sum_{k=0}^x\frac{\sum_{i=1}^na_i^k}{k!}\frac{\sum_{j=1}^mb_j^{x-k}}{(x-k)!} \end{aligned} \]

发现上面是一个卷积的形式。现在需要我们能快速求出\(\sum\limits_{i=1}^na_i^k\)

构造\(\sum\limits_{i=1}^na_i^k\)的生成函数:
\[ \begin{aligned} A(i)&=\sum_ja_i^jx^j\\ F(x)&=\sum_{i=1}^nA(i) \end{aligned} \]

\(F\)函数的每一项即为\(\sum\limits_{i=1}^na_i^k\)

化一下式子
\[ \begin{aligned} F(x)&=\sum_{i=1}^n\sum_{j}a_i^jx^j\\ &=\sum_{i=1}^n\frac{1}{1-a_ix}\\ &=\sum_{i=1}^n1+\frac{a_ix}{1-a_ix}\\ &=n-x\sum_{i=1}^n\frac{-a_i}{1-a_ix}\\ &=n-x\sum_{i=1}^n\left[\ln(1-a_ix)\right]'\\ &=n-x\left[\sum_{i=1}^n\ln(1-a_ix)\right]'\\ &=n-x\left\{\ln\left[\prod_{i=1}^n(1-a_ix)\right]\right\}'\\ \end{aligned} \]

\(\prod_{i=1}^n(1-a_ix)\)可以用分治FFT\(O(nlog^2n)\)算出。

那么再求ln,求导,乘上x,取负,加上常数项就能得到\(F\)了。

最后把a,b的生成函数分别除以一下阶乘,再卷积一下即可。

转载于:https://www.cnblogs.com/Trrui/p/10048551.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值