Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 7095 Accepted Submission(s): 4300

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

【题目链接】:http://acm.hdu.edu.cn/showproblem.php?pid=1850

【题解】



要让先手赢;

则先手进行一次操作之后,剩余n个堆(或n-1)的数字的异或值,必然为0,这样先手输(这时对方是先手了);

可以这样

先枚举对第i个堆进行操作;

肯定是将这个堆的数字减小;

然后这个数字与其余的n-1个数字的异或值为0;

则我们先处理出其余n-1个数字的异或值;

(先处理出n个数字的异或值,然后和这第i个数字异或一下就得到了其余n-1个数字的异或值);

如果这第i个数字大于其余n-1个数字的异或值;

则这第i个数字可以通过减小;

和其余n-1个数字的异或值一样大;

当其和其他n-1个数字的异或值一样大的时候,再异或一下就变成0了;

且也只有这一种方式(对单个堆操作的话);

累计有多少个堆的数字符合上述要求就可以了;



【完整代码】

#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%I64d",&x) typedef pair<int,int> pii;
typedef pair<LL,LL> pll; const int MAXN = 1e2+10;
const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0); int m;
int a[MAXN]; int main()
{
//freopen("F:\\rush.txt","r",stdin);
rei(m);
while (m!=0)
{
int temp = 0;
rep1(i,1,m)
{
rei(a[i]);
temp ^= a[i];
}
int cnt = 0;
rep1(i,1,m)
{
if (a[i]>(temp^a[i]))
cnt++;
}
cout << cnt << endl;
rei(m);
}
return 0;
}

最新文章

  1. c#中方法的重载
  2. 【12-JDBC编程】
  3. C#文本选中及ContextMenuStrip菜单使用
  4. shell学习记录003-cat命令
  5. html:唤起手机qq开始对话 &amp; 自动拨号
  6. brew命令
  7. spring security 11种过滤器介绍
  8. 设计模式之装饰者模式(Decorator Pattern)
  9. 浮点数(double)的优势
  10. Linux环境进程间通信(四):信号灯
  11. POJ1664(整数划分)
  12. WebApi 基于token的多平台身份认证架构设计
  13. asp.net core 系列 22 EF(连接字符串,连接复原,DbContext)
  14. 还在用Json完成Ajax,改用Beetl吧
  15. 蓝桥杯c/c++省赛真题——明码
  16. 9th week blog
  17. css中的float属性以及清除方法 (2011-09-03 17:36:26)
  18. 异步方法(promise版)出错自调用
  19. The password supplied with the username Domain\UserName was not correct. Verify that it was entered correctly and try again
  20. caffe深度学习网络(.prototxt)在线可视化工具:Netscope Editor

热门文章

  1. char和achar互转
  2. hdu 2196【树形dp】
  3. SharpDX初学者教程第1部分:在Visual Studio 2013中设置SharpDX项目
  4. 枚举在switch中的运用
  5. 基于 springMVC 的 RESTful HTTP API 实践(服务端)
  6. 交互式计算和开发环境:IPython
  7. Best Open Source Software
  8. 2-3-4 tree留坑
  9. oracle 通过内部函数提高SQL效率.
  10. @codeforces - 708D@ Incorrect Flow