「loj - 3120」「CTS2019 | CTSC2019」珍珠

link。


时隔大约一年回来再做一遍。

看到自己当初用的是二项式反演,然后 ODE 的解法看起来非常构造(大概只是我不熟悉)。

气抖冷,难道平凡推导就推不出来吗!(也有可能我没搜到相关的)

推得出来的都不平凡。


前排提醒:如果没写明取值范围则默认取所有有意义的值。


先用集合幂级数或者 EGF 推,得到:

12Dk=0n2mi=0kj=0Dk(1)i(ki)(Dkj)(Dk)(D2i2j)n

以下记 l=n2m,并假设 l[0,D)(当 l<0lD 时是平凡的)。

注意到求和式中最硬的其实是 (D2i2j)n,因为 n 非常大,只能将其看成一个整体而不能展开。

因此以下再记 s=i+j,则 j=si。原式化简成(省略 12D 的系数):

s(D2s)nik=0l(1)i(ki)(Dksi)(Dk)

注意到后面的组合数可以消成 D!i!(ki)!(si)!(Dks+i)!。其中 k 只出现在两项中,因此可以变成:

s(D2s)n(Ds)ik=0l(1)i(si)(Dski)=s(D2s)n(Ds)ik=0l(1)ki(ski)(Dsi)

这里有 k=0l(1)ki(ski)=(1)li(s1li)

原因是 (1)ki(ski)xki=(1x)s,求前缀和等价于乘以因子 11x,得到 (1x)s1

当然如果你乐意,可以用上指标反转 + 平行求和来证。只是要注意 edge case。

为了方便,我们特判 s=0 的情况,得到:

s>0(D2s)n(Ds)i(1)li(s1li)(Dsi)

这样只能得到 “对于所有 s,求 [xl](1x)s1(1+x)Ds” 之类的结果,不太好做。考虑再消组合数:

s>0Dls(D2s)n(Dl)i(1)li(lli)(Dl1s1l+i)

就变成了求 “对于所有 s,求 [xs1](1x)l(1+x)Dl1”,至少可以 fft 了。


考虑 F=(1x)l(1+x)Dl1 可否用 ODE 来递推。发现 F=(l)×F1x+(Dl1)F1+x

瓶颈卡在求 (D2s)n,可以线性筛做到 O(DlnD×logn)=O(logDn)

你怎么写得还没 fft 快,丢人.jpg。


如果想知道更简单的推导方法,可以参考 https://codeforces.com/blog/entry/76447 中的最后一个。


难道用二项式反演就不能 ODE 递推吗!气抖冷!

貌似是可以的,注意到这里的二项式反演实际上就是复合 F(x1),复合之前 d-finite,复合之后自然也 d-finite。

没认真推过,推不出来别找我(

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