当前位置: 首页 > news >正文

错排问题

求有多少 \(1 \sim n\) 的排列 \(p\) 满足对于任意 $i = 1, \dots, n $,有 \(p_i \ne i\)

方法 1(递推):\(D_i = (D_{i-1} + D_{i-2}) \times (i-1)\),其中 \(D_0 = 1, \ D_1 = 0\)

第一种情况,前 \(i-1\) 位形成错排,第 \(i\) 位跟前 \(i-1\) 位里的任意一位交换。

第二种情况,有 \(i-2\) 位形成错排,第 \(i\) 位跟前 \(i-1\) 位里唯一 \(p_i = i\) 的交换。

方法 2(容斥):\(D_n = \sum \limits_{k=0}^n (-1)^k \times C_n^k \times (n-k)!\)

可以继续简化为 \(D_n = \sum \limits_{k=0}^n (-1)^k \times \dfrac{n!}{k!(n-k)!} \times (n-k)! = n! \times \sum \limits_{k=0}^n \dfrac{(-1)^k}{k!}\)

其中 \(n!\) 可以从 \((n-1)!\) 递推,后边的求和项也是会比算 \(D_{n-1}\) 时多一项,所以这个 \(D_n\) 的表达式也可以递推。

例题:P4071 [SDOI2016] 排列计数

\(n\) 个位置中选出 \(m\) 个位置固定 \(a_i = i\),其它位置进行错排。

因此答案为 \(C_n^m \times D_{n-m}\)\(D\) 表示错排数)。

组合数使用预处理阶乘和阶乘逆元的方法求。

参考代码
#include <cstdio>
const int N = 1000005;
const int MOD = 1000000007;
int d[N], f[N], g[N];
int qpow(int x, int y) {int res = 1;while (y > 0) {if (y & 1) res = 1ll * res * x % MOD;x = 1ll * x * x % MOD;y >>= 1;}return res;
}
void init(int n) {f[0] = 1; g[0] = 1;for (int i = 1; i <= n; i++) f[i] = 1ll * f[i - 1] * i % MOD;g[n] = qpow(f[n], MOD - 2);for (int i = n - 1; i > 0; i--) g[i] = 1ll * g[i + 1] * (i + 1) % MOD;d[0] = 1; d[1] = 0; for (int i = 2; i <= n; i++) d[i] = 1ll * (i - 1) * (d[i - 1] + d[i - 2]) % MOD;
}
int C(int n, int m) {return 1ll * f[n] * g[m] % MOD * g[n - m] % MOD;
}
int main()
{int t; scanf("%d", &t);init(1000000);for (int i = 1; i <= t; i++) {int n, m; scanf("%d%d", &n, &m);int ans = m > n ? 0 : 1ll * C(n, m) * d[n - m] % MOD;printf("%d\n", ans);}return 0;
}
http://www.jsqmd.com/news/688698/

相关文章:

  • 用Node.js和Express绕过权限,零成本搭建你的专属LOL战绩查询工具(附完整源码)
  • Fairseq-Dense-13B-Janeway环境部署:基于insbase-cuda124-pt250-dual-v7的完整指南
  • C程序员最后的内存安全窗口期:2026 Q2起FIPS 140-3认证与ISO/IEC 17961:2026将强制要求静态分析覆盖率≥98.7%
  • 【Qt】分享一个笔者持续更新的项目: https://github.com/missionlove/NQUI
  • 2026执医笔试冲刺,如何选对备考机构? - 医考机构品牌测评专家
  • Happy Island Designer终极指南:3步打造梦想岛屿的完整教程
  • 陕西设计资质代办2026:行业变革与本土优质代办企业 - 深度智识库
  • 集团型企业用哪款内网即时通讯比较合适?(2026 集团选型指南)
  • 别再死记硬背公式了!用Arduino+DRV8313手把手带你理解FOC的SVPWM核心(附代码)
  • 题解:AT_arc215_d [ARC215D] cresc.
  • 告别时间协调烦恼,派对模式助你高效决策
  • 2026最权威的六大降AI率方案实际效果
  • 2026公卫医师考试哪个网课提分最快?看这四个关键点 - 医考机构品牌测评专家
  • 如何在linux系统中添加KVM虚拟机的虚拟网卡?
  • 从基础到交互:深入解析 torch.nn.functional 中的 Linear 与 Bilinear 函数
  • Cursor Pro破解终极指南:三步解锁无限AI编程功能
  • 超自然小熊猫82.0最新版四队6.3超自然神瞳1.2.9版本附带卡密最新版安装教程磁场半透明除雾显棺辅助工具防闪退防检测app下载安装教程IOS安卓版苹果版apk安装包下载地址
  • 5分钟掌握剪映自动化:用Python批量处理视频剪辑的终极方案
  • 乡村全科执业助理医师考试哪个老师讲得好?请看这篇调研 - 医考机构品牌测评专家
  • 从TRP/TIS到整机性能:一份给天线工程师的微波暗室避坑与优化清单
  • 从‘C1CCCCC1’到深度学习:SMILES字符串如何成为AI药物发现的‘普通话’
  • 2026年陕西省建筑资质代办行业趋势研判与优质服务商推荐——万亿级建筑市场背后的合规赋能者 - 深度智识库
  • 从Fiddler Classic到Everywhere:一个老牌抓包工具的跨平台进化与实战对比
  • 【2026收藏版】转行成为一名机器学习工程师,可行吗?(小白/程序员必看)
  • 选型指南:Veeva EDC、Medidata Rave...主流临床试验EDC系统怎么选?
  • 终极TrollStore安装指南:30秒完成iOS 14.0-16.6.1设备越狱部署
  • 【Docker边缘部署实战手册】:20年运维专家亲授5大避坑指南与3个必学轻量级编排技巧
  • 2025最权威的五大AI辅助论文工具横评
  • 【积分攻略】手把手教你赚CRMEB社区积分,买系统、买主题直接抵扣!
  • 为什么92%的LLM推理服务在CUDA 13上存在隐式内存泄露?——三步静态检测+运行时沙箱验证法