题目链接:http://www.bnuoj.com/bnuoj/contest_show.php?cid=3570#problem/43573

C. 组合数

Time Limit: 1000ms
Case Time Limit: 1000ms
Memory Limit: 65536KB
64-bit integer IO format: %lld      Java class name: Main
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届北师大校赛热身赛第二场 C. 组合数的更多相关文章

  1. 第12届北师大校赛热身赛第二场 A.不和谐的长难句1

    题目链接:http://www.bnuoj.com/bnuoj/problem_show.php? pid=17121 2014-04-25 22:59:49 不和谐的长难句1 Time Limit: ...

  2. 第12届北师大校赛热身赛第二场 B起床的烦恼

    题目链接:http://www.bnuoj.com/bnuoj/contest_show.php? cid=3570#problem/43572 题目大意: Nono从一開始数数,他每数一个数时会计算 ...

  3. 2019牛客暑假多校赛(第二场) F和H(单调栈)

    F-Partition problem https://ac.nowcoder.com/acm/contest/882/F 题意:输入一个数n,代表总共有2n个人,然后每个人对所有人有个贡献值,然后问 ...

  4. 【杂题总汇】HDU多校赛第十场 Videos

    [HDU2018多校赛第十场]Videos 最后一场比赛也结束了…… +HDU传送门+ ◇ 题目 <简要翻译> 有n个人以及m部电影,每个人都有一个快乐值.每场电影都有它的开始.结束时间和 ...

  5. 牛客网 暑期ACM多校训练营(第二场)A.run-动态规划 or 递推?

    牛客网暑期ACM多校训练营(第二场) 水博客. A.run 题意就是一个人一秒可以走1步或者跑K步,不能连续跑2秒,他从0开始移动,移动到[L,R]的某一点就可以结束.问一共有多少种移动的方式. 个人 ...

  6. NOIP2018 全国热身赛 第二场 (不开放)

    NOIP2018 全国热身赛 第二场 (不开放) 题目链接:http://noi.ac/contest/26/problem/60 一道蛮有趣的题目. 然后比赛傻逼了. 即将做出来的时候去做别的题了. ...

  7. 2018牛客网暑期ACM多校训练营(第二场)I- car ( 思维)

    2018牛客网暑期ACM多校训练营(第二场)I- car 链接:https://ac.nowcoder.com/acm/contest/140/I来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 ...

  8. 2018牛客网暑假ACM多校训练赛(第二场)E tree 动态规划

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round2-E.html 题目传送门 - 2018牛客多校赛第二场 E ...

  9. 牛客网多校赛第9场 E-Music Game【概率期望】【逆元】

    链接:https://www.nowcoder.com/acm/contest/147/E 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...

随机推荐

  1. 机器学习(1)_R与神经网络之Neuralnet包

    本篇博客将会介绍R中的一个神经网络算法包:Neuralnet,通过模拟一组数据,展现其在R中是如何使用,以及如何训练和预测.在介绍Neuranet之前,我们先简单介绍一下神经网络算法. 人工神经网络( ...

  2. leetcode—sudoku solver

    1.题目描述 Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicate ...

  3. 遵守GPL的开源软件能用于商用吗?

    遵守GPL的开源软件能用于商用吗? 比较经典的开源协议有 GPL,BSD 等等. GPL 软件可以用于商业用途,甚至说,RMS 撰写 GPL 协议的目的就是为了让自己的 GPL 软件 emacs 可以 ...

  4. 【原创】Docker容器及Spring Boot微服务应用

    Docker容器及Spring Boot微服务应用 1 什么是Docker 1.1 Docker的出现 问题一:项目实施环境复杂问题 传统项目实施过程中经常会出现“程序在我这跑得好好的,在你那怎么就不 ...

  5. Hadoop学习记录(7)|Eclipse远程调试Hadoop

    1.创建Hadoop项目 2.创建包.类 这里使用hdfs.WordCount为例 3.编写自定Mapper和Reducer程序 MyMapper类 static class MyMapper ext ...

  6. 内存中的static、const实现形式

    最近在考虑下半年找工作的事情,看了不少面试题目,其中还是蛮有收获的,把基础好好复习了一遍.比如这个题目,static.const现形式,static和const类型的变量在写程序的时候也写了很多,不过 ...

  7. HD1049Climbing Worm

    Problem Description An inch worm is at the bottom of a well n inches deep. It has enough energy to c ...

  8. nyoj117 求逆序数

    求逆序数 时间限制:2000 ms  |  内存限制:65535 KB 难度:5   描述 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中 ...

  9. HDU 5489 Removed Interval (LIS变形)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5489 给你n个数,要删去其中连续的L个,问你删去之后的LIS最大是多少? 我们先预处理出以i下标为开头 ...

  10. 在TFS2013上删除项目

    TFSDeleteProject 会永久性损坏团队项目,之后无法恢复该项目. 您应该在使用 TFSDeleteProject 之前备份所有重要的项目数据. 若要使用 TFSDeleteProject  ...