前言
这里有个不用 min-max 反演的爆标做法。
其复杂度可以做到 O(n2logn)。(认为 n∼∑A∼∑B)
可以先去了解一下 【ZJOI2019】开关 的 GF 做法再来阅读此题解。
一个记号
为了避免歧义,先声明一下一个看上去有点古怪的记号。
设
f=∑kfkzk
则定义
Ξf=∑kk!fkzk
直观看来就是给每个系数乘上了一个阶乘。
因此,这就是一个从 EGF 转为 OGF 的记号。
不难验证其对加法、数乘有线性。
初步思路
设 Pi=AiS。
考虑暴力枚举最后一步是什么数。
那么,除了当前数 i 外,别的数 j 都已经出现了至少 Bj 次,而自己先前已经出现了恰 Bi−1 次。
因此,考虑 EGF 组合意义,设:
fi=∑k≥BiPkizkk!=ePiz−∑k<BiPkizkk!
gi=PBiizBi−1(Bi−1)!
h=∑igi∑j≠ifj
则答案即
∑kk[zkk!]h
或者改写成
(Ξh)′(1)
(其实 Ξh 此处可以认为是转成了 PGF,然后这个柿子的正确性就不言而喻了)
容易发现 h 即分式 ∑gf 的分子。
容易发现 h 把乘法展开后每项均形如
CabzaebzS
升一维!
换元,设 u=ezS,则即
Cabzaub
因此我们可以暴力模拟加入一个分式通分的过程,把 h 的计算使用一个二维背包的 dp 在 O(n3)(应该?)的时间内完成。
造福调试
以下是样例二的 h,可供调试使用。
−(u3−2)z3+(−u5+9u3+4u2−24)z2+(−48u4+48u3+36u2+120u−156)z−216u3+216u2+216u−216432
进一步推导
考虑怎么计算
(ΞzaebzS)′(1)
为了方便,以下解出
(Ξzaebz)′(1)
的柿子,然后最后再把 b 代为 bS 即可。
先摆结论:
Ξzaebz=a!za(1−bz)a+1
证明?
可以直接把系数展开;当然,也有更简洁(?)的推导,见文末。
然后就很简单了。
(Ξzaebz)′=(a!za(1−bz)a+1)′=a!za−1(a+bz)(1−bz)a+2
(Ξzaebz)′(1)=a!(a+b)(1−b)a+2
好了?
好,我们现在已经得到了一个 O(n3)(应该?)的做法了。
但是这样还不够,我们可以来的更给力一点啊!
考虑瓶颈在分式基求和上。
回想是一维多项式时,我们可以在 O(nlog2n) 的时间内用分治卷积解决。
现在是二维多项式的分式基,我们依旧考虑分治卷积,只是单次乘法改用二维 FFT。
这样,我们就做到了 O(n2logn) 的优秀复杂度!
于是,我们就爆标了。
Laplace 变换
文末,我们给出 Ξzaebz 的另一种推导方法。
大家都知道
a!=∫+∞0tae−tdt
吧?
不知道也没有关系,现在不就知道了。
定义 Laplace 变换
Lf(z)=∫+∞0f(zt)e−tdt
容易验证有 Ξf=Lf。
于是 f=zaebz 时,
Lf(z)=∫+∞0f(zt)e−tdt=∫+∞0(zt)aebzte−tdt=za∫+∞0tae−t(1−bz)dt=za(1−bz)a+1∫+∞0(t(1−bz))ae−t(1−bz)d(t(1−bz))=a!za(1−bz)a+1
于是就得到
Ξzaebz=a!za(1−bz)a+1
这是一个令人满意的收尾。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫