hdu1850 Being a Good Boy in Spring Festival
2016-01-24 18:07
507 查看
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 6033 Accepted Submission(s): 3598
Problem Description
一年在外 父母时刻牵挂
春节回家 你能做几天好孩子吗
寒假里尝试做做下面的事情吧
陪妈妈逛一次菜场
悄悄给爸爸买个小礼物
主动地 强烈地 要求洗一次碗
某一天早起 给爸妈用心地做回早餐
如果愿意 你还可以和爸妈说
咱们玩个小游戏吧 ACM课上学的呢~
下面是一个二人小游戏:桌子上有M堆扑克牌;每堆牌的数量分别为Ni(i=1…M);两人轮流进行;每走一步可以任意选择一堆并取走其中的任意张牌;桌子上的扑克全部取光,则游戏结束;最后一次取牌的人为胜者。
现在我们不想研究到底先手为胜还是为负,我只想问大家:
——“先手的人如果想赢,第一步有几种选择呢?”
Input
输入数据包含多个测试用例,每个测试用例占2行,首先一行包含一个整数M(1<M<=100),表示扑克牌的堆数,紧接着一行包含M个整数Ni(1<=Ni<=1000000,i=1…M),分别表示M堆扑克的数量。M为0则表示输入数据的结束。
Output
如果先手的人能赢,请输出他第一步可行的方案数,否则请输出0,每个实例的输出占一行。
Sample Input
Sample Output
题意:给你n堆石子,让你判断让先手必胜的走法中的第一步的方案数,如果不是必胜,就输出0.
思路:求第一步的方案数,其实就是求n堆中,改变某一堆的个数,使得它们的异或和变为0的方案数,那么我们可以先把初始状态的异或和求出来,然后把它的最高位求出来,那么看n堆中这一位也为1的个数就行了,因为改变符合这个条件的堆一定可以使得整体的异或和变为0。
Total Submission(s): 6033 Accepted Submission(s): 3598
Problem Description
一年在外 父母时刻牵挂
春节回家 你能做几天好孩子吗
寒假里尝试做做下面的事情吧
陪妈妈逛一次菜场
悄悄给爸爸买个小礼物
主动地 强烈地 要求洗一次碗
某一天早起 给爸妈用心地做回早餐
如果愿意 你还可以和爸妈说
咱们玩个小游戏吧 ACM课上学的呢~
下面是一个二人小游戏:桌子上有M堆扑克牌;每堆牌的数量分别为Ni(i=1…M);两人轮流进行;每走一步可以任意选择一堆并取走其中的任意张牌;桌子上的扑克全部取光,则游戏结束;最后一次取牌的人为胜者。
现在我们不想研究到底先手为胜还是为负,我只想问大家:
——“先手的人如果想赢,第一步有几种选择呢?”
Input
输入数据包含多个测试用例,每个测试用例占2行,首先一行包含一个整数M(1<M<=100),表示扑克牌的堆数,紧接着一行包含M个整数Ni(1<=Ni<=1000000,i=1…M),分别表示M堆扑克的数量。M为0则表示输入数据的结束。
Output
如果先手的人能赢,请输出他第一步可行的方案数,否则请输出0,每个实例的输出占一行。
Sample Input
3 5 7 9 0
Sample Output
1
题意:给你n堆石子,让你判断让先手必胜的走法中的第一步的方案数,如果不是必胜,就输出0.
思路:求第一步的方案数,其实就是求n堆中,改变某一堆的个数,使得它们的异或和变为0的方案数,那么我们可以先把初始状态的异或和求出来,然后把它的最高位求出来,那么看n堆中这一位也为1的个数就行了,因为改变符合这个条件的堆一定可以使得整体的异或和变为0。
#include<iostream> #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #include<vector> #include<map> #include<set> #include<queue> #include<stack> #include<string> #include<algorithm> using namespace std; typedef long long ll; int a[105]; int main() { int n,m,i,j,num; while(scanf("%d",&n)!=EOF && n!=0) { num=0; for(i=1;i<=n;i++){ scanf("%d",&a[i]); num=num^a[i]; } if(num==0)printf("0\n"); else{ int t=0; for(i=20;i>=0;i--){ if( (num&(1<<i))!=0 ){ t=i; break; } } int tot=0; for(i=1;i<=n;i++){ if( (a[i]&(1<<t) )!=0 )tot++; } printf("%d\n",tot); } } return 0; }
相关文章推荐
- spring 配置文件中的占位符 使用 context:property-placeholder
- 简单的java爬虫实现
- Java实现Windows系统服务 JavaService
- C 与 JAVA 的对比分析
- 深入理解Java:注解(Annotation)自定义注解入门
- 使用struts2+spring+hibernate测试多对多关系映射的时候出现懒加载问题:could not initialize proxy - no Session
- JavaEE Tutorials (30) - Duke综合案例研究示例
- JavaEE Tutorials (29) - Duke辅导案例研究示例
- JavaEE Tutorials (28) - Duke书店案例研究示例
- JavaEE Tutorials (27) - Java EE的并发工具
- JavaEE Tutorials (26) - 批处理
- JavaEE Tutorials (25) - 使用Java EE拦截器
- JavaEE Tutorials (24) - 资源适配器示例
- Java如何把String[]类型的记录插入到Mysql中
- 使用Eclipse创建Maven Web工程
- JavaEE Tutorials (23) - 资源适配器和契约
- JavaEE Tutorials (22) - 事务
- JavaEE Tutorials (21) - Java EE安全:高级主题
- Java Collections - ArrayList
- JavaEE Tutorials (20) - 企业应用安全入门