題目描述
甲,乙兩個人玩Nim取石子游戲。
nim遊戲的規則是這樣的:地上有n堆石子(每堆石子數量小於10000),每人每次可從任意一堆石子裡取出任意多枚石子扔掉,可以取完,不能不取。每次只能從一堆裡取。最後沒石子可取的人就輸了。假如甲是先手,且告訴你這n堆石子的數量,他想知道是否存在先手必勝的策略。
輸入輸出格式
輸入格式:
第一行一個整數T<=10,表示有T組資料
接下來每兩行是一組資料,第一行一個整數n,表示有n堆石子,n<=10000;
第二行有n個數,表示每一堆石子的數量
輸出格式:
共T行,如果對於這組資料存在先手必勝策略則輸出"Yes",否則輸出"No",不包含引號,每個單詞一行。
輸入輸出樣例
輸入樣例#1: 複製
2 2 1 1 2 1 0
輸出樣例#1: 複製
No Yes
最基礎的Nim博弈
亦或和為0先手輸
否則先手勝
#include<cstdio> #include<algorithm> using namespace std; const int MAXN=1e6+10,INF=1e9+10; inline int read() { char c=getchar();int x=0,f=1; while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} return x*f; } int main() { #ifdef WIN32 freopen("a.in","r",stdin); #else #endif int Test=read(); while(Test--) { int ans=0; int N=read(); while(N--) { int P=read(); ans=ans^P; } ans==0?printf("No\n"):printf("Yes\n"); } return 0; }