第12届北师大校赛热身赛第二场 C. 组合数
2014-04-25 21:59
232 查看
题目链接:http://www.bnuoj.com/bnuoj/contest_show.php?cid=3570#problem/43573
Time Limit: 1000ms
Case Time Limit: 1000ms
Memory Limit: 65536KB
64-bit integer IO format: %lld Java class name: Main
Submit Status
Font Size:
+
-
对于给定的n和k,求它们的组合数C(n, k)的奇偶性
多组输入。每组输入包含两个整数n,k(1<=k<=n<=10^8)。输入以EOF结束。
对于每组输入,输出一个数表示C(n, k)的奇偶性,0表示偶数,1表示奇数
数论问题:对组合数,若n&k==k则为奇数,否则则为偶数。
证明如下:
证明出自:http://zhidao.baidu.com/link?url=FTCA2X8YsPRIMW7_eiGNnxELJIL4ymgvosNXk0VEA5LbXDNnuxirzBmqtiLjKbG2e9IpXlKpR2jF6fKPSlOL6_
附上代码:
C. 组合数
Time Limit: 1000msCase Time Limit: 1000ms
Memory Limit: 65536KB
64-bit integer IO format: %lld Java class name: Main
Submit Status
Font Size:
+
-
对于给定的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届北师大校赛热身赛第二场 B起床的烦恼
- 第12届北师大校赛热身赛第二场 A.不和谐的长难句1
- 第12届北师大校赛热身赛第二场 B起床的烦恼
- 第12届北师大校赛热身赛第二场 C. 组合数
- 第12届北师大校赛热身赛第二场 A.不和谐的长难句1
- 中南大学ACM12月月赛第二场热身赛解题报告
- 浙江财经大学校赛热身赛
- 福州大学 FOJ有奖月赛-2017年4月(校赛热身赛)(DP)
- HUST2012校赛,USC2013新队员训练第二场
- ACM学习历程—NPU1045 2015年陕西省程序设计竞赛网络预赛(热身赛)C题 Graph Theory(递推 && 组合数学 && 大数)
- 第二场热身赛A(简单水题)
- 郑大第九届校赛-热身赛-zzulioj-1808-小d的翻转游戏
- 2015 多校赛 第二场 1002 (hdu 5301)
- HDOJ热身赛1004--复习下排列组合公式
- 2017浙工大之江学院校赛 C 组合数学+思维
- 2015 多校赛 第二场 1004 hdu(5303)
- 第14届 浙江财经大学 校赛热身赛
- 2015 多校赛 第二场 1006 (hdu 5305)
- 按照左右半区的方式重新组合单链表----BAT实习内推笔试卷(第二场)
- 哈理工 校赛(热身赛)2238 围巾的纠结(判断回路问题)