zoukankan      html  css  js  c++  java
  • 洛谷P2197 nim游戏(Nim游戏)

    题目描述

    甲,乙两个人玩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
    "):printf("Yes
    ");
        }
        return 0;
    }
  • 相关阅读:
    汉诺塔问题
    两个有序链表序列的合并
    数列求和
    求集合数据的均方差
    [NOIP2014] 提高组 洛谷P1328 生活大爆炸版石头剪刀布
    [NOIP2014] 普及组
    洛谷P1726 上白泽慧音
    洛谷P1808 单词分类
    洛谷P1889 士兵站队
    洛谷P1288 取数游戏II
  • 原文地址:https://www.cnblogs.com/zwfymqz/p/8458994.html
Copyright © 2011-2022 走看看