[bzoj1022][SHOI2008]小约翰的游戏John【博弈论】

【题目链接】
  http://www.lydsy.com/JudgeOnline/problem.php?id=1022
【题解】
  Anti-Nim游戏
  这里写图片描述
  *SG值即为异或值
  证明:
  (2)似乎不用证明
  (1)的话,如果SG==0,那么一定有一堆以上大于1,所以先手无法做到(2)的第2点,若先手行动后还剩下一堆大于1的,那么后手可以做到进入第二个状态(取完那堆或剩一个),如果大于1堆,那么只要模仿先手使得SG变为0即可。

#include <bits/stdc++.h>
using namespace std;
int main(){
    int num,opt,n,j,flag;
    for (scanf("%d",&opt); opt>0; opt--){
        scanf("%d",&n); num=flag=0;
        for (int i=1; i<=n; i++){
            scanf("%d",&j);
            num=num xor j;
            if (j>1) flag=1;
        }
        if ((flag==1&&num==0)||(flag==0&&num!=0)) printf("Brother\n");
            else printf("John\n");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值