错排

错排

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

求法1:无脑容斥。

至少有k个位置对应的数与下标相同的方案数为 \(\binom{n}{k} (n-k)!\)

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

\[d(n) = \sum_{k=0}^n(-1)^k\binom{n}{k} (n-k)!\\ =n!\sum^n_{k=0}(-1)^k\frac{1}{k!} (用定义展开组合数,将n!移出来) \]

求法2:递推

另一种做法是考虑递推,

第一步,把第n个元素放在一个位置,比如位置k,一共有n-1种方法;
第二步,放编号为k的元素,这时有两种情况:⑴把它放到位置n,那么,对于剩下的n-1个元素,由于第k个元素放到了位置n,剩下n-2个元素要满足错排的性质,就有\(d_{n-2}\)种方法;⑵第k个元素不把它放到位置n,其他元素i不能放在第i个元素的位置,这和错排所求的问题是一样的,这时,对于这n-1个元素,有 \(d_{n-1}\) 种方法

\[\therefore d_n = (n-1)(d_{n-1} + d_{n-2}) \]

初值:\(d_1 = 0, d_2 = 1\)

例题

[SDOI2016] 排列计数

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

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

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

剩下位置错排:\(d_{n-m}\)

所以答案为\(\binom{n}{m}d_{n-m}\)

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

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

posted @ 2025-01-22 14:45  花子の水晶植轮daisuki  阅读(37)  评论(1)    收藏  举报
https://blog-static.cnblogs.com/files/zouwangblog/mouse-click.js