传送门

组合数学简单题。


Ans=(nm)∗1Ans=\binom {n} {m}*1Ans=(mn​)∗1~(n−m)(n-m)(n−m)的错排数。

前面的直接线性筛逆元求。

后面的错排数递推式本蒟蒻竟然推出来了。

首先说说为什么Ans=(nm)∗1Ans=\binom {n} {m}*1Ans=(mn​)∗1~nnn-mmm的错排数。

考虑首先选出mmm个排列正确的数有(nm)\binom {n} {m}(mn​)种选法。

然后剩下的n−mn-mn−m个数因为有严格的大小关系相当于只需要保证每个数与其下标不相同。

那么我们把这n−mn-mn−m个数提出来。

它们的错排数跟111~nnn-mmm的错排数是相同的。

因此就是是这样了。

所以错排数怎么推呢?

假设已经求出了1,11,11,1~2,12,12,1 ~ 333 … 111 ~ nnn-111的错排数,要求111~nnn的错排数。

我们设111~iii的错排数为f[i]f[i]f[i]。

考虑现在在某个排列111~i−1i-1i−1中加入iii (i≥2)(i \geq 2)(i≥2)。

那么有两种情况。

  1. 已有的排列中排列正确的数个数为0,那么只用从原排列中随便选个数放到第iii个位置,然后拿iii去填空就行了,方案数为(i−1)∗f[i−1](i-1)*f[i-1](i−1)∗f[i−1]。
  2. 已有的排列中排列正确的数个数为1,那么把这个数挪到第iii个位置,然后用iii去填空就行了,由于i−1i-1i−1个数都有可能成为那个排列正确的数,而且对于剩下的i−2i-2i−2个数都是错排的,因此方案数为(i−1)∗f[i−2](i-1)*f[i-2](i−1)∗f[i−2]

    =>f[i]=(i−1)∗(f[i−1]+f[i−2])f[i]=(i-1)*(f[i-1]+f[i-2])f[i]=(i−1)∗(f[i−1]+f[i−2])

代码:

#include<bits/stdc++.h>
using namespace std;
inline int read(){
	int ans=0;
	char ch=getchar();
	while(!isdigit(ch))ch=getchar();
	while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
	return ans;
}
const int mod=1e9+7,N=1e6+5;
int T,n,m,f[N],ifac[N],fac[N];
int main(){
	T=read();
	f[0]=1,f[1]=0,fac[0]=fac[1]=ifac[1]=ifac[0]=1;
	for(int i=2;i<=N-5;++i)fac[i]=1ll*fac[i-1]*i%mod,ifac[i]=1ll*(mod-mod/i)*ifac[mod%i]%mod,f[i]=1ll*(f[i-1]+f[i-2])*(i-1)%mod;
	for(int i=2;i<=N-5;++i)ifac[i]=1ll*ifac[i]*ifac[i-1]%mod;
	while(T--)n=read(),m=read(),printf("%d\n",1ll*fac[n]*ifac[m]%mod*ifac[n-m]%mod*f[n-m]%mod);
	return 0;
}

2018.10.25 bzoj4517: [Sdoi2016]排列计数(组合数学)的更多相关文章

  1. BZOJ4517:[SDOI2016]排列计数(组合数学,错排公式)

    Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列恰好有 m 个数是 ...

  2. BZOJ4517 Sdoi2016 排列计数 【DP+组合计数】*

    BZOJ4517 Sdoi2016 排列计数 Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 ...

  3. bzoj-4517 4517: [Sdoi2016]排列计数(组合数学)

    题目链接: 4517: [Sdoi2016]排列计数 Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 846  Solved: 530[Submit][ ...

  4. [BZOJ4517][SDOI2016]排列计数(错位排列)

    4517: [Sdoi2016]排列计数 Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 1616  Solved: 985[Submit][Statu ...

  5. [SDOI2016] 排列计数 (组合数学)

    [SDOI2016]排列计数 题目描述 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列恰 ...

  6. bzoj4517[Sdoi2016]排列计数(组合数,错排)

    4517: [Sdoi2016]排列计数 Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 1792  Solved: 1111[Submit][Stat ...

  7. 洛谷P4071 [SDOI2016] 排列计数 [组合数学]

    题目传送门 排列计数 题目描述 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列恰好有 m ...

  8. [BZOJ4517] [Sdoi2016] 排列计数 (数学)

    Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列恰好有 m 个数是 ...

  9. BZOJ 4517: [Sdoi2016]排列计数(组合数学)

    题面 Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列恰好有 m ...

随机推荐

  1. 单例&多线程

    单例模式,最常见的就是饥饿模式,和懒汉模式,一个直接实例化对象,一个在调用方法时进行实例化对象.在多线程模式中,考虑到性能和线程安全问题,我们一般选择下面两种比较经典的单例模式,在性能提高的同时,又保 ...

  2. wk1&2 字符串

    [CQ] 自增怎么样都增了,赋值不一定: int x = 2; int y = 2; int i = ++x; int j = y++; System.out.println(x); System.o ...

  3. Tomcat配置远程调试端口(windows、Linux)

    当我们需要定位生产环境问题,而日志又不清晰的情况下,我们可以借助Tomcat提供的远程调试,设置如下: // Linxu系统: apach/bin/startup.sh开始处中增加如下内容: decl ...

  4. 一分钟了解mongodb(转)

    mongo的由来 截取自英文俚语humongous,意为”巨大的”,是否表明mongodb在设计之初就是为大数据量处理而生呢? mongodb是个啥 mongodb是个可扩展.高性能.开源.面向文档( ...

  5. 通配符的匹配很全面, 但无法找到元素 'tx:annotation-driven' 的声明

    启动Tomcat时报错,通配符的匹配很全面, 但无法找到元素 'tx:annotation-driven' 的声明,报错如下 1.从报错可以看到找不到元素   tx:annotation-driven ...

  6. git bash 基本命令

    1.打开git bash界面后,进入某个目录下时时,可以使用cd 命令,cd时change directory的简写,表示改变目录,比如,想切换到某个盘符下,可以使用cd g:,则会进入到g盘路径下, ...

  7. 安装后没有IP

    修改  /etc/sysconfig/network-scripts/ifcfg-eth0 改为yes

  8. centos7下keepalived1.3.4安装与使用

    keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障. 一.下载keepalived http://www.keepalived.org/ 如 ...

  9. html5的地理位置定位

    html5提供的地理位置定位使开发人员不用借助其他软件就能轻松实现位置查找,地图应用,导航等功能. 地理位置定位基本原理GPS, WIFI, IP, 手机信号基站 核心对象Geolocation是wi ...

  10. Struts框架之结果页面的跳转

    1. 结果页面存在两种方式 * 全局结果页面(有很多时候我们会跳转到同一页面,所以我们可以配置一个全局结果页面,不管什么情况都会跳转到这个页面) > 条件:如果<package>包中 ...