给定 n,和一个 k 次多项式,对于每个 m≤n,设 σ 为一个大小为 m 且拆出的所有循环大小都为 3 的倍数的置换,|sp(σ)| 为它拆出的循环数,求所有 F(|sp(σ)|),要求复杂度 Θ(nk)
Sol:
机房大佬的神奇做法看不懂,只会题解的暴力推式子。
考虑把多项式写成牛顿级数(下降幂多项式的系数乘上一个 i!),实际上要求:
∑σk∑i=0bi(|sp(σ)|i)=k∑i=0bi∑σ(|sp(σ)|i)
这东西看着就像用生成函数做,后面实际上是对任意满足条件的置换中选出 i 个循环的方案数求和。
环排列的 EGF 为 ∑xii=−ln1−x,为了满足 3 的倍数的限制,我们这样我们考虑套路单位根,可知 3 的倍数大小的循环的 EGF 为:
G=−ln(1−x)+ln(1−ωx)+ln(1−ω2x)3
置换是由许多循环构成的,回忆 ex 的泰勒展开,我们发现满足条件的置换的 EGF 为 F=eG(x),由于我们要对选出 i 个置换的方案数求和,引入新的变量 y 表示选或不选,则有 F=e(1+y)G,从 p 阶满足条件的置换中选出 q 个循环的方案数为 p![xpyq]F考虑两边对 x 求偏导:
δFδx=(1+y)G′F=1+y3(11−x+ω1−ωx+ω21−ω2x)F
现在同时取 [xpyq] 项系数:
(p+1)[xpyq]F=13([xpyq](11−x+ω1−ωx+ω21−ω2x)F+[xpyq−1](11−x+ω1−ωx+ω21−ω2x)F)
=p∑i=0[xi](11−x+ω1−ωx+ω21−ω2x)⋅([xp−iyq]F+[xp−iyq−1]F)
=13p∑i=0(1+ωi+1+ω2i+2)⋅([xp−iyq]F+[xp−iyq−1]F)
考虑递推,不妨设 fp,q=[xpyq]F
(p+1)fp+1,q=13p∑i=0(1+ωi+1+ω2i+2)⋅(fp−i,q+fp−i,q−1)
=13(3(fp−2,q+fp−2,q−1)+p∑i=3(1+ωi+1+ω2i+2)⋅(fp−i,q+fp−i,q−1))
=13(3(fp−2,q+fp−2,q−1)+p−3∑i=0(1+ωi+1+ω2i+2)⋅(fp−3−i,q+fp−3−i,q−1))
=13(3(fp−2,q+fp−2,q−1)+3(p−2)fp−2,q)
=fp−2,q−1+(p−1)fp−2,q
fp,q=1pfp−3,q−1+p−2pfp−3,q
再令 gp,q=p!fp,q,则
gp,q=p!(1pfp−3,q−1+p−2pfp−3,q)
=(p−1)!fp−3,q−1+(p−2)(p−1)!fp−3,q
=(p−1)(p−2)(p−3)!fp−3,q−1+(p−1)(p−2)2(p−3)!fp−3,q
=(p−1)(p−2)(gp−3,q−1+(p−2)gp−3,q)
边界条件 g1,q=g2,q=0,g3,q=2[q≤1]。O(nk) 递推即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现