您的位置:首页 > 其它

Matches Game(POJ_2234)

2016-04-30 08:48 483 查看

Description

Here is a simple game. In this game, there are several piles of matches and two players. The two player play in turn. In each turn, one can choose a pile and take away arbitrary number of matches from the pile (Of course the number of matches, which is taken away, cannot be zero and cannot be larger than the number of matches in the chosen pile). If after a player’s turn, there is no match left, the player is the winner. Suppose that the two players are all very clear. Your job is to tell whether the player who plays first can win the game or not.

Input

The input consists of several lines, and in each line there is a test case. At the beginning of a line, there is an integer M (1 <= M <=20), which is the number of piles. Then comes M positive integers, which are not larger than 10000000. These M integers represent the number of matches in each pile.

Output

For each test case, output “Yes” in a single line, if the player who play first will win, otherwise output “No”.

Sample Input

2 45 45

3 3 6 9

Sample Output

No

Yes

炒鸡经典的一道NIM博弈(有关博弈论的详细介绍戳->这里<-),嘛,看懂了这上边讲的就能敲出来了(= =虽然看不懂也可以敲,不过还是推荐看懂,不然题目披个马甲可能就不会做了),想直接记结论的话就是当且仅当a1^a2^…^an=0(ai表示每一堆的数量)时后手必胜,简单粗暴

代码

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

int main()
{
int n;
int a;
while(scanf("%d", &n) != EOF)
{
int ans = 0;
for(int i = 0; i < n; i++)
{
scanf("%d", &a);
ans ^= a;
}
if(ans == 0)
printf("No\n");
else
printf("Yes\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: