• 1022: [SHOI2008]小约翰的游戏John【Nim博弈,新生必做的水题】


    1022: [SHOI2008]小约翰的游戏John

    Time Limit: 1 Sec  Memory Limit: 162 MB
    Submit: 2709  Solved: 1726
    [Submit][Status][Discuss]

    Description

      小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取
    的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不取,我们规定取到最后一
    粒石子的人算输。小约翰相当固执,他坚持认为先取的人有很大的优势,所以他总是先取石子,而他的哥哥就聪明
    多了,他从来没有在游戏中犯过错误。小约翰一怒之前请你来做他的参谋。自然,你应该先写一个程序,预测一下
    谁将获得游戏的胜利。

    Input

      本题的输入由多组数据组成第一行包括一个整数T,表示输入总共有T组数据(T≤500)。每组数据的第一行包
    括一个整数N(N≤50),表示共有N堆石子,接下来有N个不超过5000的整数,分别表示每堆石子的数目。

    Output

      每组数据的输出占一行,每行输出一个单词。如果约翰能赢得比赛,则输出“John”,否则输出“Brother”
    ,请注意单词的大小写。

    Sample Input

    2
    3
    3 5 1
    1
    1

    Sample Output

    John
    Brother

    HINT

     

    Source

    Seerc2007

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1022

    分析:

    题目大意:反Nim游戏,即取走最后一个的人输

    首先状态1:如果所有的堆都是1,那么堆数为偶先手必胜,否则先手必败

    然后状态2:如果有两个堆数量相同且不为1,那么后手拥有控场能力,即:

    若先手拿走一堆,那么后手可以选择将另一堆留下1个或者全拿走,使这两堆最终只剩1个或0个;

    若先手将一堆拿剩一个,那么后手可以选择将另一堆留下一个让先手拿或全拿走,使这两堆最终只剩1个或0个;

    若先手将一堆拿走一部分,那么后手可以将另一堆同样拿走一部分,然后同上

    状态3:若Xor!=0 那么先手可以先拿走一部分让Xor=0 然后同状态2先手必胜 否则先手必败

    于是若所有堆全是1 Xor==0先手必胜 否则后手必胜

    若有堆不是1 Xor==0后手必胜 否则先手必胜

    下面给出AC代码:

     1 #include <stdio.h>
     2 int T,n,x;
     3 int main()
     4 {
     5     while(scanf("%d",&T)!=EOF)
     6     {
     7         while(T--)
     8         {
     9             int flag=0,sum=0;
    10             scanf("%d",&n);
    11             for(int i=1;i<=n;i++)
    12             {
    13                 scanf("%d",&x);
    14                 sum^=x;
    15                 if(x!=1)
    16                     flag=1;
    17             }
    18             if((sum==0&&flag==0)||(sum!=0&&flag==1))
    19                 printf("John
    ");
    20             else 
    21                 printf("Brother
    ");
    22         }
    23     }
    24     return 0;
    25 }
  • 相关阅读:
    angular 中如何使用自定义组件
    angular组件数据和事件
    angular组件数据
    angular绑定数据
    angular自定义组件
    angular项目目录结构分析
    Angular 开发工具介绍
    从Microsoft.AspNet.Identity看微软推荐的一种MVC的分层架构
    EF How to use context.Set and context.Entry, which ships with EF4.1 ?
    C# 向IQueryable添加一个Include扩展方法
  • 原文地址:https://www.cnblogs.com/ECJTUACM-873284962/p/6956279.html
Copyright © 2020-2023  润新知