SDOI 2016 排列计数

SDOI 2016 排列计数

题目链接

设满足题目条件且长度为n恰好有m个数稳定的序列数为 a n s ( n , m ) ans(n,m) ans(n,m)
那么易得题目答案ANS可表示为:
A N S = a n s ( n , m ) = C ( n , m ) ∗ a n s ( n − m , 0 ) ANS=ans(n,m)=C(n,m)*ans(n-m,0) ANS=ans(n,m)=C(n,m)ans(nm,0)
因为题目规定 n , m ≤ 1 e 6 n,m\le1e6 n,m1e6,所以C(n,m)可以通过预处理阶乘+乘法逆元快速求得。
至于ans(n-m,0),又被称作为全错位排位数。
即n个相异的元素排成一排且 a i ≠ i a_i\ne i ai=i的排列个数。
设长度为n的全错位排列数为Fn,有如下递推公式:
F n = ( n − 1 ) ( F n − 1 + F n − 2 ) , n ≥ 3 F_n=(n-1)(F_{n-1}+F_{n-2}),n\ge3 Fn=(n1)(Fn1+Fn2),n3,其中 F 1 = 0 , F 2 = 1 F_1=0,F_2=1 F1=0,F2=1。另外对于长度为0的序列,规定其全错位排列数为1。

证明:依据递推的思想,显然 F 1 = 0 , F 2 = 1 F_1=0,F_2=1 F1=0,F2=1,对于 n ≥ 3 n\ge3 n3,不妨设第n个数排在了第 k ( k ≠ n ) k(k\ne n) k(k=n)位。
1、若第k个数排在了第n位,那么对于n和k两个位置满足 a n ≠ n , a k = n ≠ k a_n\ne n,a_k=n\ne k an=n,ak=n=k,那么只剩下了n-2个数,显然剩下n-2个数可构成的全错位排列数为 F n − 2 F_{n-2} Fn2
2、若第k个数没有排在第n位,则规定了 a n ≠ k a_n\ne k an=k,那么可以将第n位假想为第k位,那么问题就转换成了n-1个数的全错位排列问题,解为 F n − 1 F_{n-1} Fn1
由于 1 ≤ k < n 1\le k< n 1k<n,所以 F n = ( n − 1 ) ( F n − 1 + F n − 2 ) F_n=(n-1)(F_{n-1}+F_{n-2}) Fn=

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值