国庆期间,省城刚刚举行了一场盛大的集体婚礼,为了使婚礼进行的丰富一些,司仪临时想出了有一个有意思的节目,叫做"考新郎",具体的操作是这样的:

首先,给每位新娘打扮得几乎一模一样,并盖上大大的红盖头随机坐成一排; 然后,让各位新郎寻找自己的新娘.每人只准找一个,并且不允许多人找一个. 最后,揭开盖头,如果找错了对象就要当众跪搓衣板... 看来做新郎也不是容易的事情... 假设一共有N对新婚夫妇,其中有M个新郎找错了新娘,求发生这种情况一共有多少种可能.

Input

输入数据的第一行是一个整数C,表示测试实例的个数,然后是C行数据,每行包含两个整数N和M ( 1 < M <= N <= 20 )。

Output

对于每个测试实例,请输出一共有多少种发生这种情况的可能,每个实例的输出占一行。

Sample Input

2

2 2

3 2

Sample Output

1

3


思考过程:

这其实就是一个错排问题+排列组合问题

首先要从N个新郎当中找出M个找错的。即C(M,N)。其次是对这M组新人进行错排。而且两者之间是乘法原则。


(1)

N个新郎中M个错一共有几种,显然是C(m,n)=n!/(m!*(n-m)!)。即C(m,n)=n!/m!/(n-m)!

(2)

M个数的错排个数,递推关系:f[n]=(n-1)*(f[n-1]+f[n-2])

详细推导过程:

错排的情况:

首先考虑,如果开始有n-1个新郎,并且这n-1个人都已经完成了错排(有f(n-1)种可能),现在又来了一个人,那么后来的第n个人可以通过用自己的新娘去和那n-1个人中的任意一个交换,来实现n个人都错排。这种情况有(n-1)*f[n-1]种可能;

另外,如果开始的n-1个人不是都错排,那么要想使第n个人过来与其中一个交换后实现错排的话就必须满足两个条件:

①那n-1个人中只有一个人选到了自己的新娘,也就是说有n-2个人都已经错排了。

②第n个人必须和那个选到自己新娘的人去交换,但那个选到自己新娘的人可以是n-1个人中的任意一个。这种情况有(n-1)*f[n-2]种可能。

其他情况都不能满足n个人错排。

因此递推关系:f[n]=(n-1)*(f[n-1]+f[n-2])。


#include <iostream>
using namespace std;
int main()
{
long long arr[22];
arr[0]=1;
arr[1]=1;
for(int i=2;i<=20;i++)
{
arr[i]=arr[i-1]*i;
}
long long num[22];
num[1]=0;
num[2]=1;
for(int i=3;i<=20;i++) num[i]=(i-1)*(num[i-1]+num[i-2]);
int c;
cin>>c;
int n,m;
while(c--)
{
cin>>n>>m;
long long result=arr[n]/arr[m]/arr[n-m]*num[m];
cout<<result<<endl;
}
return 0;
}

最新文章

  1. CodeForces 165C Another Problem on Strings(组合)
  2. Javascript学习笔记:闭包题解(3)
  3. 《我是一只IT小小鸟》读书笔记
  4. Node.js项目目录介绍
  5. 0731am视图 模型
  6. 回文串---Best Reward
  7. php5全版本绕过open_basedir读文件脚本
  8. Loadrunner脚本之C语言文件处理函数
  9. git 删除已经 add 的文件
  10. Sublime Text各种插件使用方法
  11. ASP.NET MVC 4.0 学习1-C#基础语法
  12. 调用CachedRowSetImpl类时,为什么会出现这样的错误
  13. TensorFlow for R
  14. 判断网站URL是否正常访问脚本
  15. ios协议和委托
  16. dedecms给图片加水印覆盖整张图片
  17. springboot(一)
  18. 队列queue实现线程的消费者和生产者
  19. CentOS 6.5使用yum快速搭建LAMP环境
  20. 【基础知识】.Net基础加强 第二天

热门文章

  1. MVC学习之路【小补充】
  2. 快速搭建一个Quartz定时任务【转载,好文 ,值得收藏,亲身试用 效果不错】
  3. sqlserver 操作数据表语句模板
  4. 如何定义一个有效的OWIN Startup Class
  5. VM虚拟机Linux和主机数据传输
  6. T-SQL基础(五)之增删改
  7. 为什么需要把页面放在WEB-INF文件夹下面?
  8. javascript浅拷贝深拷贝详解
  9. react学习(四)之设置 css样式 篇
  10. 小tips:JS操作数组的slice()与splice()方法