一、尼姆博弈:
  有任意堆物品,每堆物品的个数是任意的,双方轮流从中取出物品,
每次只能从一堆物品中取出部分或全部物品,最少取一件,取到最后一件物品的人获胜。
  把每堆物品全部异或起来,如果最终得到的值为0,则先手必败,否则先手必胜。
  int flag=0;

二、anti-nim:
  取到最后一件物品的人输。
先手胜当且仅当:
  所有堆石子数都为1且游戏的异或值为0(即有偶数个独单堆(每堆只有一个石子))。
  存在某堆石子数不为1,且游戏的异或值不为0.

例题:P2197 【模板】nim游戏

代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<queue>
#include<vector>
#define ll long long
using namespace std;
int main(void)
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n,x,ans=0;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d",&x),ans^=x;
        if(ans) printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}