码迷,mamicode.com
首页 > 其他好文 > 详细

P4279 [SHOI2008]小约翰的游戏

时间:2019-08-29 09:39:03      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:偶数   math   for   include   amp   ble   using   一个   lin   

传送门

显然的 $Anti-SG$ ,直接套上结论就行

当然也可以略证一下

$1.$如果石头堆都只有一个石头,那么堆数为偶数时先手必胜

$2.$如果某堆有多个石头,那么总 $SG$ 不为 $0$ 时先手必胜

考虑只要一堆有多个石头时,先手可以拿到只剩一个或者全部拿完,然后就变成 $1.$ 的情况并且先手可以随意控制堆的奇偶,先手必胜

如果有多堆石头且 $SG$ 值不为 $0$ 时,先手显然可以拿成 $SG$ 为 $0$ 的情况,然后后手又不得不拿成 $SG$ 不为 $0$ 的情况...最后 $SG$ 不为 $0$ 的情况一定是只剩一堆有多个石头,然后就到了 $2.$ 的情况

后手面对非 $1.2.$ 时必输,所以当且仅当 $1.2.$ 其中一条满足时,先手必胜

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
inline int read()
{
    int x=0,f=1; char ch=getchar();
    while(ch<0||ch>9) { if(ch==-) f=-1; ch=getchar(); }
    while(ch>=0&&ch<=9) { x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
    return x*f;
}
int T,n,a,now;
int main()
{
    T=read();
    while(T--)
    {
        n=read(); int mx=0; now=0;
        for(int i=1;i<=n;i++)
        {
            a=read(); now^=a;
            mx=max(mx,a);
        }
        if((!now&&mx<=1) || (now&&mx>1)) printf("John\n");
        else printf("Brother\n");
    }
    return 0;
}

 

P4279 [SHOI2008]小约翰的游戏

标签:偶数   math   for   include   amp   ble   using   一个   lin   

原文地址:https://www.cnblogs.com/LLTYYC/p/11427599.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!