zoukankan      html  css  js  c++  java
  • hdu-1907-反nim博弈

    John

    Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
    Total Submission(s): 5793    Accepted Submission(s): 3358


    Problem Description
    Little John is playing very funny game with his younger brother. There is one big box filled with M&Ms of different colors. At first John has to eat several M&Ms of the same color. Then his opponent has to make a turn. And so on. Please note that each player has to eat at least one M&M during his turn. If John (or his brother) will eat the last M&M from the box he will be considered as a looser and he will have to buy a new candy box.

    Both of players are using optimal game strategy. John starts first always. You will be given information about M&Ms and your task is to determine a winner of such a beautiful game.

     
    Input
    The first line of input will contain a single integer T – the number of test cases. Next T pairs of lines will describe tests in a following format. The first line of each test will contain an integer N – the amount of different M&M colors in a box. Next line will contain N integers Ai, separated by spaces – amount of M&Ms of i-th color.

    Constraints:
    1 <= T <= 474,
    1 <= N <= 47,
    1 <= Ai <= 4747

     
    Output
    Output T lines each of them containing information about game winner. Print “John” if John will win the game or “Brother” in other case.

     
    Sample Input
    2 3 3 5 1 1 1
     
    Sample Output
    John Brother
     
    Source
     
        对于所有不同颜色M&M的个数都为1的情况,显然:
           if(sg==0)  win       -->状态A
        if(sg!=0)   lose       -->状态B
       对于对立情况,
        当数量不为1的种类只有一种的时候(状态C),显然先手总可以将其转化到状态B这个败态,所以C是胜态。
        当数量不为1的种类大于1的时候,分为sg=0(状态D)和sg!=0(状态E)两种情况,D只能转化到E,E能转化到D或者
    C,由于C是败态,所以E尽可能向D转化,但随着石子的不断减少导致E只能转化到C,所以E是败态,D是胜态。
      
      
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int main(){
     4     int t,n,m;
     5     cin>>t;
     6     while(t--){
     7         int a,sg=0,tot=0;
     8         cin>>n;
     9         for(int i=1;i<=n;++i){
    10             cin>>a;
    11             sg^=a;
    12             if(a==1) tot++;
    13         }
    14         if( (tot==n&&sg==0) || (tot!=n&&sg!=0)) puts("John");
    15         else puts("Brother");
    16     }
    17     return 0;
    18 }
  • 相关阅读:
    解决asp.net Core Mvc网页汉字乱码问题
    DbInitializer.cs初始化过程中context.entityName.Add()遇到的类型不匹配错误
    EF Core » 关系
    EF Core » 影子属性
    如何增加Asp.Net Core生成的模板网站中用户信息表中的列(AspNetUsers)
    Working with Data » Getting started with ASP.NET Core and Entity Framework Core using Visual Studio »迁移
    centos下添加git
    Linux网络流量实时监控ifstat iftop命令详解
    常见CEPH操作命令
    CentOS 6.3下Samba服务器的安装与配置
  • 原文地址:https://www.cnblogs.com/zzqc/p/9349433.html
Copyright © 2011-2022 走看看