洛谷P2197 nim遊戲(Nim遊戲)

自為風月馬前卒發表於2018-02-22

題目描述

甲,乙兩個人玩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;
}

 

相關文章