poj3480(Anti-SG 游戏)

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值