http://poj.org/submit?problem_id=3480
[定义](anti-nim 游戏)
桌子上有 N 堆石子,游戏者轮流取石子。
每次只能从一堆中取出任意数目的石子,但不能不取。
取走最后一个石子者败。
[结论]
先手必胜当且仅当:
(1)所有堆的石子数都为 1 且游戏的 SG 值为 0;
(2)有些堆的石子数大于 1 且游戏的 SG 值不为 0。
// File Name: poj3480.cpp
// Author: bo_jwolf
// Created Time: 2013年10月04日 星期五 12:27:03
#include<vector>
#include<list>
#include<map>
#include<set>
#include<deque>
#include<stack>
#include<bitset>
#include<algorithm>
#include<functional>
#include<numeric>
#include<utility>
#include<sstream>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<ctime>
using namespace std;
int main(){
int Case, n, temp, ans, sum;
while( scanf( "%d", &Case ) != EOF && Case ){
while( Case-- ){
scanf( "%d", &n );
ans = sum = 0;
while( n-- ){
scanf( "%d", &temp );
ans ^= temp;
if( temp > 1 ) sum++;
}
if( ans == 0 ){
if( sum ) printf( "Brother\n" );
else
printf( "John\n" );
}
else{
if( sum )
printf( "John\n" );
else
printf( "Brother\n" );
}
}
}
return 0;
}