没错,这题还有个加强版,要从多项式角度考虑了。
首先,很容易就能想到,单个数a的生成函数即为1+ax,而我们要求的就是m∏i=1(1+ix)这个多项式的前n项的系数。
我们在之前XV.付公主的背包中也碰见过类似的形式。于是我们可以直接套上一个ln就能把它转成和的形式。
于是现在就有
exp(m∑i=1ln(1+ix))
考虑ln(1+ix)的泰勒展开,会发现它就等于∞∑j=1(−1)j+1ijjxj。
于是,m∑i=1ln(1+ix)=m∑i=1∞∑j=1(−1)j+1ijjxj=∞∑j=1(−1)j+1m∑i=1ijjxj。
假如我们知道m∑i=1ij,就可以直接O(n)地计算上式了;于是现在关键就在于计算此式。
我们考虑上式的EGF:∞∑i=0(m∑j=1ji)xii!
交换枚举顺序,得到
m∑j=1∞∑i=0(jx)ii!
将它重新转回EGF形式,得到
m∑j=1ejx
然后套上等比数列求和公式,最终就得到
e(m+1)x−1ex−1
重新转回函数形式,得到
∞∑i=1(m+1)ixii!∞∑i=11i!xi
因为分子分母都没有常数项,故我们直接把常数项约掉,就得到
∞∑i=0(m+1)i+1xi(i+1)!∞∑i=01(i+1)!xi
分母上多项式求逆一下,再和分子卷一起就得到了m∑i=1ij的EGF;再乘上一个阶乘,最终就得到了原序列。
通过m∑i=1ij,我们就能求出m∑i=1ln(1+ix),然后套上一个exp就是原序列。
时间复杂度O(nlogn)。常数极大,卡了好久才卡过。
AC记录(因为不确定性极强,不保证再次提交仍可通过)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?