• Being a Good Boy in Spring Festival(尼姆博弈)


    Being a Good Boy in Spring Festival

    Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 51 Accepted Submission(s): 45
     
    Problem Description
    一年在外 父母时刻牵挂
    春节回家 你能做几天好孩子吗
    寒假里尝试做做下面的事情吧

    陪妈妈逛一次菜场
    悄悄给爸爸买个小礼物
    主动地 强烈地 要求洗一次碗
    某一天早起 给爸妈用心地做回早餐

    如果愿意 你还可以和爸妈说
    咱们玩个小游戏吧 ACM课上学的呢~

    下面是一个二人小游戏:桌子上有M堆扑克牌;每堆牌的数量分别为Ni(i=1…M);两人轮流进行;每走一步可以任意选择一堆并取走其中的任意张牌;桌子上的扑克全部取光,则游戏结束;最后一次取牌的人为胜者。
    现在我们不想研究到底先手为胜还是为负,我只想问大家:
    ——“先手的人如果想赢,第一步有几种选择呢?”
     
    Input
    输入数据包含多个测试用例,每个测试用例占2行,首先一行包含一个整数M(1<M<100),表示扑克牌的堆数,紧接着一行包含M个整数Ni(1<=Ni<=1000000,i=1…M),分别表示M堆扑克的数量。M为0则表示输入数据的结束。
     
    Output
    如果先手的人能赢,请输出他第一步可行的方案数,否则请输出0,每个实例的输出占一行。
     
    Sample Input
    3
    5 7 9
    0
     
    Sample Output
    1
     
    Author
    lcy
     
    Source
    ACM Short Term Exam_2007/12/13
     
    Recommend
    lcy
     
    /*
    题意:尼姆博弈
    
    初步思路:由尼姆博弈定理知道,当前局势是S态的时候自己足够聪明肯定是能胜利的,如果是T态对方足够聪明肯定不可能胜利,也就
        是0种,那么怎么样判断操作的种类呐,当先手面临S态的时候肯定想留给后手T态,也就是修改某一堆的石子使得能是n1^n2...^nn=0,
        令x=n1^n2...^t^...^nn=0,如果想让x等于零,那么修改其中一堆ni的时候,肯定想 (ni')^剩余的数异或=0,当ni大于剩余的数异或
        的时候才可能成立,所以遍历数组找到这样的数就可以了
    */
    #include<bits/stdc++.h>
    using namespace std;
    int n;
    int a[110];
    int res=0;
    int cur=0;
    void init(){
        res=0;
        cur=0;
    }
    int main(){
        while(scanf("%d",&n)!=EOF&&n){
            init();
            for(int i=0;i<n;i++){
                scanf("%d",&a[i]);
                res^=a[i];
            }
            for(int i=0;i<n;i++){
                if(a[i]>(res^a[i]))
                    cur++;
            }
            if(res) printf("%d
    ",cur);
            else puts("0");
        }
        return 0;
    }
  • 相关阅读:
    Notes for Advanced Linux Programming 2. Writing Good GNU/Linux Software
    GIT 子模块温习
    Memcached 源码分析——从 main 函数说起
    Zookeeper 初体验之——JAVA实例
    如何使用 indent 美化你的代码
    PGF/TIKZ 资源汇总
    Zookeeper 进阶之——Zookeeper编程示例(如何使用Zookeeper实现屏障Barriers和队列Queues)
    Zookeeper 进阶之——典型应用场景(二)
    如何将 Linux 内核实现的红黑树 rbtree 运用到你的 C 程序中?
    三行代码实现C语言单元测试框架
  • 原文地址:https://www.cnblogs.com/wuwangchuxin0924/p/6372213.html
Copyright © 2020-2023  润新知