AT5202

前言

这里有个不用 min-max 反演的爆标做法。

其复杂度可以做到 O(n2logn)。(认为 nAB

可以先去了解一下 【ZJOI2019】开关 的 GF 做法再来阅读此题解。


一个记号

为了避免歧义,先声明一下一个看上去有点古怪的记号。

f=kfkzk

则定义

Ξf=kk!fkzk

直观看来就是给每个系数乘上了一个阶乘。

因此,这就是一个从 EGF 转为 OGF 的记号

不难验证其对加法、数乘有线性。


初步思路

Pi=AiS

考虑暴力枚举最后一步是什么数。

那么,除了当前数 i 外,别的数 j 都已经出现了至少 Bj 次,而自己先前已经出现了恰 Bi1 次。

因此,考虑 EGF 组合意义,设:

fi=kBiPikzkk!=ePizk<BiPikzkk!

gi=PiBizBi1(Bi1)!

h=igijifj

则答案即

kk[zkk!]h

或者改写成

(Ξh)(1)

(其实 Ξh 此处可以认为是转成了 PGF,然后这个柿子的正确性就不言而喻了)


容易发现 h 即分式 gf 的分子。

容易发现 h 把乘法展开后每项均形如

CabzaebzS

升一维!

换元,设 u=ezS,则即

Cabzaub

因此我们可以暴力模拟加入一个分式通分的过程,把 h 的计算使用一个二维背包的 dp 在 O(n3)(应该?)的时间内完成。


造福调试

以下是样例二的 h,可供调试使用。

(u32)z3+(u5+9u3+4u224)z2+(48u4+48u3+36u2+120u156)z216u3+216u2+216u216432


进一步推导

考虑怎么计算

(ΞzaebzS)(1)

为了方便,以下解出

(Ξzaebz)(1)

的柿子,然后最后再把 b 代为 bS 即可。

先摆结论:

Ξzaebz=a!za(1bz)a+1

证明?

可以直接把系数展开;当然,也有更简洁(?)的推导,见文末。

然后就很简单了。

(Ξzaebz)=(a!za(1bz)a+1)=a!za1(a+bz)(1bz)a+2

(Ξzaebz)(1)=a!(a+b)(1b)a+2


好了?

好,我们现在已经得到了一个 O(n3)(应该?)的做法了。

但是这样还不够,我们可以来的更给力一点啊!

考虑瓶颈在分式基求和上。

回想是一维多项式时,我们可以在 O(nlog2n) 的时间内用分治卷积解决。

现在是二维多项式的分式基,我们依旧考虑分治卷积,只是单次乘法改用二维 FFT

这样,我们就做到了 O(n2logn) 的优秀复杂度!

于是,我们就爆标了。


Laplace 变换

文末,我们给出 Ξzaebz 的另一种推导方法。

大家都知道

a!=0+taetdt

吧?

不知道也没有关系,现在不就知道了。

定义 Laplace 变换

Lf(z)=0+f(zt)etdt

容易验证有 Ξf=Lf

于是 f=zaebz 时,

Lf(z)=0+f(zt)etdt=0+(zt)aebztetdt=za0+taet(1bz)dt=za(1bz)a+10+(t(1bz))aet(1bz)d(t(1bz))=a!za(1bz)a+1

于是就得到

Ξzaebz=a!za(1bz)a+1

这是一个令人满意的收尾。

posted @   myee  阅读(47)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
点击右上角即可分享
微信分享提示