HDU
来源:互联网 发布:sql库位库存分配 编辑:程序博客网 时间:2024/06/07 03:00
题目:求c(n,0),c(n,1),...,c(n,n)中有多少个奇数
思路:
C(n,m)%2,那么由lucas定理,我们可以写成二进制的形式观察,
比如 n=1001101,m是从000000到1001101的枚举,我们知道在该定理中
C(0,1)=0,因此如果n=1001101的0对应位置的m二进制位为1那么C(n,m) % 2==0,因此m对应n为0的
位置只能填0,而1的位置填0,填1都是1(C(1,0)=C(1,1)=1),不影响结果为奇数,并且保证不会
出n的范围,因此所有的情况即是n中1位置对应m位置0,1的枚举,那么结果很明显就是:2^(n中1的个数)
代码:
#pragma comment(linker, "/STACK:1024000000,1024000000")#include<iostream>#include<algorithm>#include<ctime>#include<cstdio>#include<cmath>#include<cstring>#include<string>#include<vector>#include<map>#include<set>#include<queue>#include<stack>#include<list>#include<numeric>using namespace std;#define LL long long#define ULL unsigned long long#define INF 0x3f3f3f3f3f3f3f3f#define mm(a,b) memset(a,b,sizeof(a))#define PP puts("*********************");template<class T> T f_abs(T a){ return a > 0 ? a : -a; }template<class T> T gcd(T a, T b){ return b ? gcd(b, a%b) : a; }template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}// 0x3f3f3f3f3f3f3f3fint main(){ int n; while(~scanf("%d",&n)){ int cnt=0; do{ if(n&1) cnt++; n/=2; }while(n>0); printf("%d\n",(1<<cnt)); } return 0;}
阅读全文
0 0
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- hdu
- HDU
- doxygen使用与C++注释规范
- 05.Spring Cloud学习笔记之服务容错保护组件Hystrix
- 第2课:HLS 的工作机制
- hdu2063(二分图匹配 匈牙利算法模板题)
- 请求网页图片
- HDU
- 数据结构思维 第三章 `ArrayList`
- QToolButton 工具按钮
- 2017/9/2 离线赛
- C# IEnumerable、IEnumerator和yield关键字详解
- SPI总线接口
- doxygen的安装与配置
- 统计学习方法五 决策树分类
- WOJ1133-Candies