题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5011
好吧,看一下代码真的是醉了,这么短。
题目意思:给你一个数n,表示有n堆硬币,接下来一行有n个数,分别表示每一堆的硬币数,两个个取硬币,每次可以去任一硬币堆的的任意硬币数(>0),为先手是必胜还是必败。
我们从最后开始考虑,假设j为数量,当j=0时是必败态。
所以我们得判断初始状态是必胜态还是还是必败态便可;求出最后的异或,便可以知道先手有没有可能赢。
#include<iostream> #include<algorithm> #include<cstdio> #include<string> #include<cstring> using namespace std; int main() { int n,a; while(~scanf("%d",&n)){ int s=0; for(int i=0;i<n;i++){ scanf("%d",&a); s^=a; } if(s) printf("Win\n"); else printf("Lose\n"); } return 0; }