「loj - 6703」小 Q 的序列

link。


https://codeforces.com/blog/entry/76447 里面抄一个代数做法。

考虑朴素 dp:记 fi,j=fi1,j+(j+ai)×fi1,j1,不太好做。

做变换 gi,j=fi,ij,并记 bi=ai+i,则有 gi,j=gi1,j1+(bij)×gi1,j

其对应的 OGF 满足 Gi=x(Gi1Gi1)+biGi1

根据高中数学,我们可以构造 Hi=Giex,则有 Hi=biHi1xHi1

注意算子 ϑ=xddx 只和本位系数有关,也就是说有 hn,j=h0,j×i(bij)=(1)jj!×i(bij)

之后可以分治 fft 算出 B(x)=i(bix),然后多点求值求出 Hn


但是在本题中我们只需要算 ign,i,是否有更好的方法?

我们知道:

gn,m=j(1)jj!×i(bij)×1(mj)!=pBp×(j(1)jj!×jnp×1(mj)!)

其中 Bp=[xp]i(bix),一样分治 fft 算出。

考虑将 jnp 展开成下降幂形式:

j(1)jj!×jnp×1(mj)!=k{npk}×(j(1)jj!×(jk)×k!×1(mj)!)=k{npk}×(j(mkjk)(1)j(mk)!)=(1)m{npm}

ign,i=pBp×(i(1)i{npi})。接下来只需要计算 snp=i(1)i{npi}

继续用代数做法。设出 EGF:S(x)=sii!xi。代入:

S(x)=im(1)m{im}i!xi=m(1)m(i{im}i!xi)=m(1)m(ex1)mm!=exp(1ex)

做个多项式 exp 即可求出。这真的更优秀吗。

posted @   Tiw_Air_OAO  阅读(273)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示