错排

错排

定义错排d(x)为:长度为x的排列,并且对于任意i,第i位的数不是i的排列方案数。

求法1:无脑容斥。

至少有k个位置对应的数与下标相同的方案数为 (nk)(nk)!

d(x)相当于k=0的情况减k=1加上k=2...来容斥的结果。形式化表达为:

d(n)=k=0n(1)k(nk)(nk)!=n!k=0n(1)k1k!(n)

求法2:递推

另一种做法是考虑递推,考虑 n 所在的环的大小:

  • 大小为 2,那么剩下的所有是一个 n2 的错排,方案数为 (n1)dn2
  • 大小 >2,那么插入 n 之前就已经是一个错排了,枚举插入位置,方案数为 (n1)dn1

dn=(n1)(dn1+dn2)

初值:d1=0,d2=1

例题

[SDOI2016] 排列计数

求有多少种 1 ∼ n 的排列 a,满足恰有 m 个位置 i 使得 ai=i。答案对 1e9 + 7 取模。

1 ≤ T ≤ 5 × 1e5,1 ≤ n ≤ 1e6,0 ≤ m ≤ 1e6。

从n中任意钦定m个位置:$\binom{n}{m}

剩下位置错排:dnm

所以答案为(nm)dnm

O(n)预处理阶乘逆元和错排后O(1)

最后特判n=m时,答案为1

posted @   花子の水晶植轮daisuki  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
https://blog-static.cnblogs.com/files/zouwangblog/mouse-click.js
点击右上角即可分享
微信分享提示