题目概述:
尼姆游戏,最后一次取的获胜
有N堆物,每堆num个,每次从一堆中至少取一个
输入:
每行第一个数为N,其后N个数,为num,同一组数据会呈现在同一行中,输入到EOF为止
限制:
1<=N<=20;num<=1e7
输出:
每行一个字符串,先手必胜时为
Yes
先手必败时为
No
多组输出之间没有空行
样例输入:
2 45 45
3 3 6 9
样例输出:
No
Yes
讨论:
简单说说尼姆游戏公式,如果最后一次取的获胜,那么只要所有堆的个数依次异或的结果为0,则先手必败,否则必胜,因此只要知道公式,这个题几分钟就能写完,额甚至没有用fun函数
题解状态:
164K,0MS,C++,452B
#include<algorithm>
#include<string.h>
using namespace std;
#define INF 0x3f3f3f3f
#define maxx(a,b) ((a)>(b)?(a):(b))
#define minn(a,b) ((a)<(b)?(a):(b))
#define MAXN 200030
int main(void)
{
//freopen("vs_cin.txt", "r", stdin);
//freopen("vs_cout.txt", "w", stdout);
int N;
while (~scanf("%d", &N)) {//input
int sum = 0, num;
while (N--) {
scanf("%d", &num)//input;
sum ^= num;
}
if (sum == 0)
printf("No\n");//output
else
printf("Yes\n");//output
}
}
EOF