bzoj_1022: [SHOI2008]小约翰的游戏John

Nim游戏 改成了 拿到最后一个输,所以要躲着拿

get到了新技能:(S为所有堆数异或值)

1.堆数不全是1时

S>0,你可以控制当前这个局面,(因为一定有一个堆数ai>S,你可以取ai-S个石子,使其异或和==0)

否则S==0,你就会被对手控制

2.堆数全是1

显然,此时你面临 奇数堆,必输

特判即可

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <iostream>
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;

int T;
int n;
int a[56];

int main(){

    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        for(int i=1;i<=n;++i)
            scanf("%d",&a[i]);
        int s=0,flag=0;
        for(int i=1;i<=n;++i)
        {
            s^=a[i];
            if(a[i]>1)
                flag=1;
        }
        if(!flag)
        {
            if(s)
                printf("Brother
");
            else
                printf("John
");
        }
        else
        {
            if(s)
                printf("John
");
            else
                printf("Brother
");
        }
    }

}
bzoj_1022
原文地址:https://www.cnblogs.com/A-LEAF/p/7608128.html