其他分享
首页 > 其他分享> > Anti-Nim博弈原理与证明

Anti-Nim博弈原理与证明

作者:互联网

简介

Anti-Nim博弈是Nim博弈的变形,它的定义是:

给定 \(n\) 堆物品,第 \(i\) 堆物品有 \(A_i\) 个,两人轮流取,每次可以任选一堆取走任意多个物品,可以取光但不能不取,最后把物品全部取完者失败

判断先手是否有必胜策略

推理

先手必胜当且仅当:

  1. 每堆的物品数都为 \(1\) 且Nim和为 \(0\)
  2. 有些堆的物品数大于 \(1\) 且Nim和不为 \(0\)

证明:

第一种情况:每堆物品数都为 \(1\) 且Nim和为 \(0\) ,那么 \(n\) 为偶数,易知先手必胜

第二种情况:

例题

Luogu 4279

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int t, n, a, res, maxx;
    scanf("%d", &t);
    while(t--) {
        maxx = res = 0;
        scanf("%d", &n);
        for(int i = 1; i <= n; i++) {
            scanf("%d", &a);
            res = res ^ a;
            maxx = max(maxx, a);
        }
        if(maxx == 1)
            printf("%s\n", res == 0 ? "John" : "Brother");
        else
            printf("%s\n", res ? "John" : "Brother");
    }
    return 0;
}

标签:先手,博弈,Nim,int,必胜,Anti,物品,大于
来源: https://www.cnblogs.com/tttkf/p/15914970.html