lightoj 1253 - Misere Nim Nim博弈

给定n堆石子,双方轮流游戏,可以任取一堆的任意个,谁拿走最后一个谁输,A先手。

Nim博弈跑完发现如果都是1的结果刚好不对...

纯1的情况只能通过有多少堆来判断....

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define mod 1000007
#define inf 0x3f3f3f3f
#define N 100100
int main()
{
    int t;
    scanf("%d",&t);
    for(int cas=1;cas<=t;cas++)
    {
        int n,ans=0,f=0,x;
        scanf("%d",&n);
        for(int i=0;i<n;i++)
        {
            scanf("%d",&x);
            ans=ans^x;
            if(x>1)
                f=1;
        }
        if(f==0)
        {
            if(n%2)
                printf("Case %d: Bob\n",cas);
            else
                printf("Case %d: Alice\n",cas);
        }
        else
        {
            if(ans==0)
                printf("Case %d: Bob\n",cas);
            else
                printf("Case %d: Alice\n",cas);
        }
    }
    return 0;
}


你可能感兴趣的:(nim博弈,lightoj)