[联考]钻石教练

给定 n,和一个 k 次多项式,对于每个 mn,设 σ 为一个大小为 m 且拆出的所有循环大小都为 3 的倍数的置换,|sp(σ)| 为它拆出的循环数,求所有 F(|sp(σ)|),要求复杂度 Θ(nk)

Sol:

机房大佬的神奇做法看不懂,只会题解的暴力推式子。

考虑把多项式写成牛顿级数(下降幂多项式的系数乘上一个 i!),实际上要求:

σi=0kbi(|sp(σ)|i)=i=0kbiσ(|sp(σ)|i)

这东西看着就像用生成函数做,后面实际上是对任意满足条件的置换中选出 i 个循环的方案数求和。

环排列的 EGF 为 xii=ln1x,为了满足 3 的倍数的限制,我们这样我们考虑套路单位根,可知 3 的倍数大小的循环的 EGF 为:

G=ln(1x)+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)GF=1+y3(11x+ω1ωx+ω21ω2x)F

现在同时取 [xpyq] 项系数:

(p+1)[xpyq]F=13([xpyq](11x+ω1ωx+ω21ω2x)F+[xpyq1](11x+ω1ωx+ω21ω2x)F)

=i=0p[xi](11x+ω1ωx+ω21ω2x)([xpiyq]F+[xpiyq1]F)

=13i=0p(1+ωi+1+ω2i+2)([xpiyq]F+[xpiyq1]F)

考虑递推,不妨设 fp,q=[xpyq]F

(p+1)fp+1,q=13i=0p(1+ωi+1+ω2i+2)(fpi,q+fpi,q1)

=13(3(fp2,q+fp2,q1)+i=3p(1+ωi+1+ω2i+2)(fpi,q+fpi,q1))

=13(3(fp2,q+fp2,q1)+i=0p3(1+ωi+1+ω2i+2)(fp3i,q+fp3i,q1))

=13(3(fp2,q+fp2,q1)+3(p2)fp2,q)

=fp2,q1+(p1)fp2,q

fp,q=1pfp3,q1+p2pfp3,q

再令 gp,q=p!fp,q,则

gp,q=p!(1pfp3,q1+p2pfp3,q)

=(p1)!fp3,q1+(p2)(p1)!fp3,q

=(p1)(p2)(p3)!fp3,q1+(p1)(p2)2(p3)!fp3,q

=(p1)(p2)(gp3,q1+(p2)gp3,q)

边界条件 g1,q=g2,q=0g3,q=2[q1]O(nk) 递推即可

posted @   Smallbasic  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示