2049 不容易系列之(4)——考新郎【错排+排列组合】
2015-08-24 23:32
288 查看
不容易系列之(4)——考新郎
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 26733 Accepted Submission(s): 9782
[align=left]Problem Description[/align]
国庆期间,省城HZ刚刚举行了一场盛大的集体婚礼,为了使婚礼进行的丰富一些,司仪临时想出了有一个有意思的节目,叫做"考新郎",具体的操作是这样的:
首先,给每位新娘打扮得几乎一模一样,并盖上大大的红盖头随机坐成一排;
然后,让各位新郎寻找自己的新娘.每人只准找一个,并且不允许多人找一个.
最后,揭开盖头,如果找错了对象就要当众跪搓衣板...
看来做新郎也不是容易的事情...
假设一共有N对新婚夫妇,其中有M个新郎找错了新娘,求发生这种情况一共有多少种可能.
[align=left]Input[/align]
输入数据的第一行是一个整数C,表示测试实例的个数,然后是C行数据,每行包含两个整数N和M(1<M<=N<=20)。
[align=left]Output[/align]
对于每个测试实例,请输出一共有多少种发生这种情况的可能,每个实例的输出占一行。
[align=left]Sample Input[/align]
2
2 2
3 2
[align=left]Sample Output[/align]
1
3
本题目主要考察的排列组合,需要考虑两部分,一个是从n个元素里面选择 m 个,这个直接阶乘相除就可以了,另外还要考虑错排的个数,需要错排公式........
比较简单的是先打好表,然后就直接调用相关数据了,题目不难,主要是错排公式:
再来贴一遍,相当于自己复习了....
d[1]=0;d[2]=1;
d[i]=(i-1)*(d[i-1]+d[i-2]);(i>2)
然后就没有然后了.....
#include<stdio.h>
long long x[25],y[25];
void db()
{
y[1]=0;x[0]=x[1]=y[2]=1;x[2]=2;
for(int i=3;i<21;++i)
{
x[i]=x[i-1]*i;
y[i]=(i-1)*(y[i-1]+y[i-2]);//为了省事,两个表一起打了
}
}
int main()
{
int t;
db();
scanf("%d",&t);
while(t--)
{
int n,m;
scanf("%d%d",&n,&m);
printf("%lld\n",x
/x[n-m]/x[m]*y[m]);//两种情况的乘积
}
return 0;
}
本来是个挺简单的题,但是第一次因为没考虑错排的情况,错了一次,第二次没注意打表的控制,细节出错,又错了一次,丢人啊......然后又a了一次,才过,一定要认真仔细的读题,千万不能犯不应该的错误,谨慎 !
相关文章推荐
- latex简历
- Qt 常用类 (10)—— QDialog
- 对话框--QDialog(自定义对话框简单实例)
- HDU 4081Qin Shi Huang's National Road System(最小生成树+最小瓶颈路)
- XCODE6 提交至 App Store
- 关于JDK配置环境变量的问题
- 20150824朴素贝叶斯.md
- 151. Reverse Words in a String
- RPG黑暗之光(3)EasyTouch插件的使用、角色控制、相机跟随、状态记录
- 二维线段树区域修改,最大值最小值
- Hibernate 关系映射
- 大型Web应用开发总结
- Qt入门-下拉列表框QComboBox类
- hdoj 2094 产生冠军
- https协议详解
- 在xcode6.1和ios10.10.1环境下实现app发布
- 05---JSON学习(Java)
- 线段树区间增加/赋值 求区间和最大值最小值
- 想研究一下数据库,搜了一些数据库书籍
- KVO简单介绍及用法