题目描述

过年期间,老家举行了一场盛大的集体婚礼,为了使婚礼进行的丰富一些,司仪临时想出了有一个有意思的节目,叫做“考新郎”,具体的操作是这样的:

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

输入描述:

输入包含多组数据。每组数据包含两个正整数n和m(2≤m≤n≤20)

输出描述:

对应每一组数据,输出一个正整数,表示n对新人中有m个新郎找错新娘的种数。

输入例子:

2 2
3 2

输出例子:

1
3
 意思就是说,先从n里选出m个,就是C(n,m),然后把这m个排序,前提是不能有任何一个是对应正确位置,也就是说不能有新郎选对了新娘,所有的应该排在错误的位置,这里就想到了容斥定理,总的排列是m!,然后得减去那些存在新郎选对新娘的,如果1个新郎一定选对了,其他的还有(m - 1)!种排法,且这些排法都不满足,而且这些排法中也存在其他m-1个新郎选对的情况,总的应该减去C(m,1)个(m - 1)!,但是这C(m,1)个当中仍然有重复的,还得加,任意两个都会有重复,重复的是(m - 2)!,所以加上C(m,2)个(m - 2)!,然后又是减,加。。
代码:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm> using namespace std;
int n,m;
long long fact[];
long long C(int a,int b) {
long long aa = ,bb = ;
for(int i = ;i < b;i ++) {
aa *= a - i;
bb *= (i + );
}
return aa / bb;
}
int main() {
fact[] = ;
for(int i = ;i <= ;i ++) {
fact[i] = fact[i - ] * i;
}
while(~scanf("%d%d",&n,&m)) {
long long e = fact[m],flag = -;
for(int i = ;i <= m;i ++,flag *= -) {
e += fact[m - i] * C(m,i) * flag;
}
printf("%lld\n",C(n,m) * e);
}
}

牛客网 PAT乙级(Basic Level)练习题 1023 考新郎的更多相关文章

  1. 牛客网PAT乙级(Basic Level)真题-组个最小数 (20)

    组个最小数 (20) 时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 给定数字0-9各若干个.你可以以任意顺序排 ...

  2. 牛客网PAT乙级(Basic Level)真题-数字分类 (20)

    题目描述 给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数的和: A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4 ...

  3. 牛客网PAT乙级(Basic Level)真题-数素数 (20)

    题目描述 令Pi表示第i个素数.现任给两个正整数M <= N <= 10000,请输出PM到PN的所有素数. 输入描述: 输入在一行中给出M和N,其间以空格分隔. 输出描述: 输出从PM到 ...

  4. PAT乙级(Basic Level)练习题-NowCoder数列总结

    题目描述 NowCoder最近在研究一个数列: F(0) = 7 F(1) = 11 F(n) = F(n-1) + F(n-2) (n≥2) 他称之为NowCoder数列.请你帮忙确认一下数列中第n ...

  5. C#版 - PAT乙级(Basic Level)真题 之 1021.个位数统计 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - P ...

  6. C#版 - PAT乙级(Basic Level)真题 之 1024.科学计数法转化为普通数字 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. PAT Bas ...

  7. 牛客网编程练习之PAT乙级(Basic Level):1033 害死人不偿命的(3n+1)猜想

    3n+1水题.... AC代码: import java.util.Scanner; /** * @author CC11001100 */ public class Main { public st ...

  8. 牛客网编程练习之PAT乙级(Basic Level):1034 写出这个数

    AC代码: import java.util.*; /** * @author CC11001100 */ public class Main { public static void main(St ...

  9. 牛客网编程练习之PAT乙级(Basic Level):1032 选大王

    典型的约瑟夫环问题 AC代码: import java.util.ArrayList; import java.util.List; import java.util.Scanner; /** * @ ...

随机推荐

  1. iOS 点击注释图标 弹出对应解释

    需求:如题目  接上一篇的开发内容 效果图: 这种情况存在tableView 的一个cell中. 要点 1,  弹出的对应解释 要在可视区域,并且小尖角 要指着 图片 2,  文本不能过高 有极大高度 ...

  2. 纯代码编写qt登录界面(转)

    1. 新建Qt Widgets Application,项目名称为login1,在类信息页面保持类名和基类为MainWindow和QMainWindow不变,取消选择创建界面选项,如下图所示.     ...

  3. Listening Carefully SP1403

    Listening Carefully仔细聆听When people talk, listen completely. Most people never listen. ―Ernest Heming ...

  4. axios拦截器/http

    Interceptors //处理请求或响应之前拦截请求或响应. //添加一个请求拦截器 axios.interceptors.request.use(function (config) { //在请 ...

  5. Service Meth and SideCar

    本文转自:http://philcalcado.com/2017/08/03/pattern_service_mesh.html SideCar: SideCar就是与Application一起运行的 ...

  6. java转义符的一些用法

    那么这里在列上一些转义字符 \\ 反斜杠 \t 间隔 ('\u0009')\n 换行 ('\u000A')\r 回车 ('\u000D')\d 数字 等价于 [0-9]\D 非数字 等价于 [^0-9 ...

  7. sg函数的应用

    刚刚接触到sg函数突然感觉到原来可以这么好用,sg函数应该算是博弈论中比较经典的东西了.下面来说说sg函数: 从网上搜集资料终于能看懂了下面解释来自http://www.cnblogs.com/cj6 ...

  8. 软件体系结构C2风格

    首先C2风格是最常用的一种软件体系结构风格.(下图为一个C2风格的架构图) C2是一种基于构件和消息的架构风格,可用于创建灵活的.可伸缩的软件系统.一个C2构架可以看成是按照一定规则由连接件连接的许多 ...

  9. Codeforces Round #386 (Div. 2) C D E G

    一场比较简单的题 比较脑洞 C 如果坐车比较快的话 先走不如等车 所以最后的ans是min(纯走路,纯坐车) 讨论一下坐车时间 D 因为k一定是>=1的 所以当a=b的时候 GBGBGB这样间隔 ...

  10. Java -- 利用反射 操作任意数组,包括对象数组 和 基本数据类型的数组

    items为任意数组