*HDU1850 博弈
2024-08-30 03:43:41
Being a Good Boy in Spring Festival
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 6998 Accepted Submission(s): 4234
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
5 7 9
0
Sample Output
1
Author
lcy
代码:
/*
题目问的第一步有几种选择仅仅指第一步选择哪一堆不问选择一堆中的几个。
对于先手如果a1^a2^a3......^an=0,先手必败,否则先手必胜,先手第一步的目的就是造成一种a1^a2^a3......^an=0
的局势。因为a1^a2^a3......^an=k,必定存在某一ai使得ai'=ai^k,即a1^a2^a3...^ai^k^...an=0,->a1^...ai'^...an=0.
只要ai'小于ai就可以至少取一个。
*/
#include<iostream>
using namespace std;
int main()
{
int m,a[];
while(cin>>m&&m)
{
int sum=,cnt=;
for(int i=;i<m;i++)
{
cin>>a[i];
sum=(sum^a[i]);
}
for(int i=;i<m;i++)
{
int s=(sum^a[i]);
if(s<a[i]) cnt++;
}
cout<<cnt<<endl;
}
return ;
}
最新文章
- byobu相关操作
- OpenGL变换
- SQLServer中比较末尾带有空格的字符串遇到的坑
- HDU 4686 Arc of Dream (矩阵快速幂)
- C#按需序列化对象为Json字符串
- xss攻击和sq注入
- 衔接UI线程和管理后台工作线程的类(多线程、异步调用)
- LeetCode: Unique Paths I &; II &; Minimum Path Sum
- flex弹性盒子的使用
- 微信小程序开发---逻辑层(App Service)
- Netty学习笔记(六) 简单的聊天室功能之WebSocket客户端开发实例
- JAVA项目启动正常,无法访问
- CSS之链接
- Grunt jshint Warning: Path must be a string . Received null Use
- C#期末大作业 消消乐 2017-06-01 18:11 275人阅读 评论(0) 收藏
- VS网站开发的发布部署的不同情况说明
- Elasticsearch 不同的搜索类型之间的区别
- ADO.NET Entity Framework -Code Fisrt 开篇(一)
- static 继承
- C语言:通过函数指针来完成两个数的加减乘除