HDU_1907&2509 博弈(Nim博弈变形)

来源:互联网 发布:北京赛车两期计划数据 编辑:程序博客网 时间:2024/05/17 09:24

John

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

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

题解传送门(好详细):
http://www.cnblogs.com/cchun/archive/2012/07/25/2609141.html

代码:

#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>using namespace std;int main (void){    int t;    cin>>t;    while(t--)    {        int num;        scanf("%d",&num);        int ans=0;        int xx=0;        int a;        for(int i=0;i<num;i++)        {            scanf("%d",&a);            if(a!=1)            {                ans++;            }            xx^=a;        }        if(ans==0)        {            if(xx==0)            {                    printf("John\n");                    continue;            }            if(xx!=0)            {                printf("Brother\n");                continue;            }        }        else if(xx!=0)        {            printf("John\n");            continue;        }        else        {            printf("Brother\n");            continue;        }    }    return 0;}
0 0
原创粉丝点击