题目链接: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. 【工作备忘】suricata

    因为工作遇到的困难,我向suricata的某个作者发送了邮件. On Wed, Sep 11, 2013 at 8:22 AM, likeyi <929812468@qq.com> wro ...

  2. MySQL 5.6 警告信息 command line interface can be insecure 修复

    在命令行输入密码,就会提示这些安全警告信息. Warning: Using a password on the command line interface can be insecure.   注: ...

  3. ado无法访问数据库问题

    现象:以ADO方式访问数据库的C++程序,在一台计算机上能访问成功,在另一台计算机上却访问不成功,报告不能连接错误,并且这两台计算机都装有ado. 原因:ado版本不对 解决方案:下载KB983246 ...

  4. SCAU 10678 神奇的异或

    10678 神奇的异或 时间限制:1000MS  内存限制:65535K 题型: 编程题   语言: 无限制 Description 在现在这个信息时代,数据是很重要的东西哦~ 很多时候,一条关键的数 ...

  5. SQL Server UDF用户自定义函数

    UDF的定义 和存储过程很相似,用户自定义函数也是一组有序的T-SQL语句,UDF被预先优化和编译并且尅作为一个单元爱进行调用.UDF和存储过程的主要区别在于返回结果的方式. 使用UDF时可传入参数, ...

  6. 第二百零二天 how can I 坚持

    最近增肥好明显,胃口好没办法,只要肚子起不来就行了.加油. 其实挺幸福,想吃啥吃啥. 鱼会不会被冻死,买了加热棒不想用,该咋办呢. 股市又跌没了一千多,还是不够睿智,不够淡定. 人活这一辈子,到底最想 ...

  7. [转载]关于AutoCAD.NET的辅助方法

    转载自:http://www.cnblogs.com/milian/p/3315000.html 求中点坐标: /// <summary> /// 中点 /// </summary& ...

  8. mysql慢查询Slow Query Log和未使用索引(Not Using Indexes)查询配置和使用

    mysql的“慢查询”指的是超过了允许的最大查询时间(long_query_time)的sql语句,而“未使用索引”查询顾名思义就是查询语句没有使用到索引的sql语句. 慢查询配置和使用 在msyql ...

  9. [置顶] 我的设计模式学习笔记------>Java设计模式总概况

    设计模式的概念最早起源于建筑设计大师Alexander的<建筑的永恒方法>一书,尽管Alexander的著作是针对建筑领域的,但是他的观点实际上用用于所有的工程设计领域,其中也包括软件设计 ...

  10. HDU 5164Matching on Array(AC自动机)

    这是BC上的一道题,当时比赛没有做,回头看看题解,说是AC自动机,想着没有写过AC自动机,于是便试着抄抄白书的模板,硬是搞了我数个小时2000ms时限1800过了= = ! 这里就直接贴上BC的结题报 ...