HDU 1907 John

来源:互联网 发布:轮滑的好处和坏处 知乎 编辑:程序博客网 时间:2024/06/02 02:28

尼姆博弈

今天开始学习博弈,这个理论果然精妙,胜负情况有二进制数异或值 是否为零决定。两个看似不相关。。

尼姆游戏分两种:

1.  最后拿者胜 (必胜态为:  NIM和非零)

2.  最后取者负  (必胜态为: “有充裕堆且NIM和非零”    或    “没充裕堆且NIM为零”)


代码:

#include<stdio.h>int main(){    int T,n;    scanf("%d",&T);    while(T--)    {        int nim=0,x,sum=0;        scanf("%d",&n);        for(int i=0;i<n;i++){            scanf("%d",&x);            if(x>1) sum++;            nim^=x;        }        if((sum>0&&nim) || (sum==0&&!nim)) printf("John\n");        else printf("Brother\n");    }    return 0;}