一道经典的博弈论题目。
首先说结论,先手必胜当且仅当所有堆的石头数异或和不为0。原因是假如所有堆的石头异或和不为0时必然有一种方法可以使得异或和变成0,而当异或和等于0时不论怎么取都会使得异或和变成非0数。这样下去总会有一个时候使得异或和为0后所有石头堆都为0,那么这样先手必胜。
感觉最近的随笔越来越水了。
#include<cstdio>
//#define zczc
inline void read(int &wh){
wh=0;int f=1;char w=getchar();
while(w<'0'||w>'9'){if(w=='-')f=-1;w=getchar();}
while(w<='9'&&w>='0'){wh=wh*10+w-'0';w=getchar();}
wh*=f;return;
}
int T,m,now,in;
signed main(){
#ifdef zczc
freopen("in.txt","r",stdin);
#endif
read(T);
while(T--){
read(m);now=0;
while(m--){read(in);now^=in;}
if(now)printf("Yes\n");
else printf("No\n");
}
return 0;
}