第12届北师大校赛热身赛第二场 C. 组合数
题目链接:http://www.bnuoj.com/bnuoj/contest_show.php?cid=3570#problem/43573
C. 组合数
+
-
对于给定的n和k,求它们的组合数C(n, k)的奇偶性
Input
多组输入。每组输入包括两个整数n,k(1<=k<=n<=10^8)。输入以EOF结束。
Output
对于每组输入,输出一个数表示C(n, k)的奇偶性,0表示偶数,1表示奇数
Sample Input
- 1 0
- 2 1
- 3 2
Sample Output
- 1
- 0
- 1
数论问题:对组合数,若n&k==k则为奇数,否则则为偶数。
证明例如以下:
- 公式P是指排列,从N个元素取R个进行排列(即排序)。 (P是旧使用方法,如今教材上多用A,Arrangement)
- 公式C是指组合,从N个元素取R个,不进行排列(即不排序)。
- 组合数的奇偶性判定方法为:
- 结论:
- 对于C(n,k),若n&k == k 则c(n,k)为奇数,否则为偶数。
- 证明:
- 利用数学归纳法:
- 由C(n,k) = C(n,k-1) + C(n-1,k-1);
- 相应于杨辉三角:
- 1
- 1 2 1
- 1 3 3 1
- 1 4 6 4 1
- ………………
- 能够验证前面几层及k = 0时满足结论,以下证明在C(n-1,k)和C(n-1,k-1) (k > 0) 满足结论的情况下,
- C(n,k)满足结论。
- 1).如果C(n-1,k)和C(n-1,k-1)为奇数:
- 则有:(n-1)&k == k;
- (n-1)&(k-1) == k-1;
- 由于k和k-1的最后一位(在这里的位指的是二进制的位,下同)必定是不同的,所以n-1的最后一位必定是1
- 。
- 现如果n&k == k。
- 则相同由于n-1和n的最后一位不同推出k的最后一位是1。
- 由于n-1的最后一位是1,则n的最后一位是0,所以n&k != k,与如果矛盾。
- 所以得n&k != k。
- 2).如果C(n-1,k)和C(n-1,k-1)为偶数:
- 则有:(n-1)&k != k;
- (n-1)&(k-1) != k-1;
- 现如果n&k == k.
- 则对于k最后一位为1的情况:
- 此时n最后一位也为1,所以有(n-1)&(k-1) == k-1,与如果矛盾。
- 而对于k最后一位为0的情况:
- 则k的末尾必有一部分形如:10; 代表随意个0。
- 相应的,n相应的部分为: 1{*}*; *代表0或1。
- 而若n相应的{*}*中仅仅要有一个为1,则(n-1)&k == k成立,所以n相应部分也应该是10。
- 则相应的,k-1和n-1的末尾部分均为01,所以(n-1)&(k-1) == k-1 成立,与如果矛盾。
- 所以得n&k != k。
- 由1)和2)得出当C(n,k)是偶数时,n&k != k。
- 3).如果C(n-1,k)为奇数而C(n-1,k-1)为偶数:
- 则有:(n-1)&k == k;
- (n-1)&(k-1) != k-1;
- 显然,k的最后一位仅仅能是0,否则由(n-1)&k == k就可以推出(n-1)&(k-1) == k-1。
- 所以k的末尾必有一部分形如:10;
- 相应的,n-1的相应部分为: 1{*}*;
- 相应的,k-1的相应部分为: 01;
- 则若要使得(n-1)&(k-1) != k-1 则要求n-1相应的{*}*中至少有一个是0.
- 所以n的相应部分也就为 : 1{*}*; (不会由于进位变1为0)
- 所以 n&k = k。
- 4).如果C(n-1,k)为偶数而C(n-1,k-1)为奇数:
- 则有:(n-1)&k != k;
- (n-1)&(k-1) == k-1;
- 分两种情况:
- 当k-1的最后一位为0时:
- 则k-1的末尾必有一部分形如: 10;
- 相应的,k的相应部分为 : 11;
- 相应的,n-1的相应部分为 : 1{*}0; (若为1{*}1,则(n-1)&k == k)
- 相应的,n的相应部分为 : 1{*}1;
- 所以n&k = k。
- 当k-1的最后一位为1时:
- 则k-1的末尾必有一部分形如: 01; (前面的0能够是附加上去的)
- 相应的,k的相应部分为 : 10;
- 相应的,n-1的相应部分为 : 01; (若为11,则(n-1)&k == k)
- 相应的,n的相应部分为 : 10;
- 所以n&k = k。
- 由3),4)得出当C(n,k)为奇数时,n&k = k。
- 综上,结论得证!
证明出自:http://zhidao.baidu.com/link?url=FTCA2X8YsPRIMW7_eiGNnxELJIL4ymgvosNXk0VEA5LbXDNnuxirzBmqtiLjKbG2e9IpXlKpR2jF6fKPSlOL6_
附上代码:
- #include<iostream>
- #include<algorithm>
- #include<cstdio>
- #include<cstring>
- using namespace std;
- int main()
- {
- int n,k;
- while(cin>>n>>k)
- {
- long t=n&k;
- if(t==k)
- {
- printf("1\n");
- }
- else
- {
- printf("0\n");
- }
- }
- return 0;
- }
第12届北师大校赛热身赛第二场 C. 组合数的更多相关文章
- 第12届北师大校赛热身赛第二场 A.不和谐的长难句1
题目链接:http://www.bnuoj.com/bnuoj/problem_show.php? pid=17121 2014-04-25 22:59:49 不和谐的长难句1 Time Limit: ...
- 第12届北师大校赛热身赛第二场 B起床的烦恼
题目链接:http://www.bnuoj.com/bnuoj/contest_show.php? cid=3570#problem/43572 题目大意: Nono从一開始数数,他每数一个数时会计算 ...
- 2019牛客暑假多校赛(第二场) F和H(单调栈)
F-Partition problem https://ac.nowcoder.com/acm/contest/882/F 题意:输入一个数n,代表总共有2n个人,然后每个人对所有人有个贡献值,然后问 ...
- 【杂题总汇】HDU多校赛第十场 Videos
[HDU2018多校赛第十场]Videos 最后一场比赛也结束了…… +HDU传送门+ ◇ 题目 <简要翻译> 有n个人以及m部电影,每个人都有一个快乐值.每场电影都有它的开始.结束时间和 ...
- 牛客网 暑期ACM多校训练营(第二场)A.run-动态规划 or 递推?
牛客网暑期ACM多校训练营(第二场) 水博客. A.run 题意就是一个人一秒可以走1步或者跑K步,不能连续跑2秒,他从0开始移动,移动到[L,R]的某一点就可以结束.问一共有多少种移动的方式. 个人 ...
- NOIP2018 全国热身赛 第二场 (不开放)
NOIP2018 全国热身赛 第二场 (不开放) 题目链接:http://noi.ac/contest/26/problem/60 一道蛮有趣的题目. 然后比赛傻逼了. 即将做出来的时候去做别的题了. ...
- 2018牛客网暑期ACM多校训练营(第二场)I- car ( 思维)
2018牛客网暑期ACM多校训练营(第二场)I- car 链接:https://ac.nowcoder.com/acm/contest/140/I来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 ...
- 2018牛客网暑假ACM多校训练赛(第二场)E tree 动态规划
原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round2-E.html 题目传送门 - 2018牛客多校赛第二场 E ...
- 牛客网多校赛第9场 E-Music Game【概率期望】【逆元】
链接:https://www.nowcoder.com/acm/contest/147/E 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...
随机推荐
- c/c++工程中外部头文件及库添加方法
在VS工程中,添加c/c++工程中外部头文件及库的基本步骤: 1.添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录:加上头文件存放目录. 2.添加文件引用 ...
- Javascript模板及其中的数据逻辑分离思想(MVC)
#Javascript模板及其中的数据逻辑分离思想 ##需求描述 项目数据库的题目表描述了70-120道题目,并且是会变化的,要根据数据库中的数据描述,比如,选择还是填空题,是不是重点题,题目总分是多 ...
- Masonry 实现输入框随键盘位置改变
Github: https://github.com/saitjr/MasonryDemo 直接上代码: #import "ViewController4.h" #import & ...
- Linux下静态库生成和使用
Linux下静态库生成和使用 一.静态库概念 1.库是预编译的目标文件(object files)的集合,它们可以被链接进程序.静态库以后缀为”.a”的特殊的存档(archive file)存储. ...
- 第三百五十四天 how can I 坚持
你的问题主要在于:读书不多而买书太多:读书太少又特爱思考,还话唠.. 2012年毕业,辗转无锡,上海,最后来到了北京,逛了北京, 2013年,清明去爬了长城,从天通苑搬到了甜水园, 2014年,爬了泰 ...
- MyEclipse 8.6反编译插件安装
一.下载插件文件:jad.exe.jadeclipse http://www.varaneckas.com/sites/default/files/jad/jad158g.win.zip ...
- c#学习之旅------01
一.交换两个数的值 //交换两个数的值 #region 方法一 , num2 = ;//待交换的两个数值 int temp;//临时变量 temp = num1; num1 = num2; num2 ...
- Android Studio使用JNI
0x01 前言 本文讲述使用Android Studio通过静态注册.动态注册使用JNI的方法,以及加载第三方so文件的方法 0x02 Android Studio静态注册的方式使用JNI 1. 添加 ...
- android 三种弹出框之一PopupWindow
PopupWindow 在android的弹出框我目前了解到的是有三种:AlertDialog,PopupWindow,Activity伪弹框, AlertDialog太熟悉了,这里就不介绍了 就先看 ...
- DeleteDC() 与 ReleaseDC() 的区别 [转]
DeleteDC 该函数删除指定的设备上下文环境(DC). 原型: BOOL DeleteDC(HDC hdc): 参数: hdc:设备上下文环境的句柄. 返回值: 成功,返回非零值:失败,返回零.调 ...