*HDU1907 博弈
John
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 4537 Accepted Submission(s): 2602
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.
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
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
题意:
有n堆物品,两个人,每次只能取一堆中的若干个,最后取完者败。
代码
1 //S0,T2必败,其他情况必胜 2 #include<iostream> 3 using namespace std; 4 int main() 5 { 6 int t,n,x; 7 cin>>t; 8 while(t--) 9 { 10 cin>>n; 11 int ans=0,flag=0; 12 for(int i=0;i<n;i++) 13 { 14 cin>>x; 15 ans=(ans^x); 16 if(x>1) flag++; 17 } 18 if(!flag) 19 { 20 if(n&1) cout<<"Brother\n"; 21 else cout<<"John\n"; 22 } 23 else 24 { 25 if(ans==0&&flag>=2) cout<<"Brother\n"; 26 else cout<<"John\n"; 27 } 28 29 } 30 return 0; 31 }