【Nim 游戏】 学习笔记

前言#

没脑子选手随便一道博弈论都不会 ……

正文#

Nim 游戏引入#

这里给出最简单的 Nim 游戏的题目描述:

Nim 游戏
有两个顶尖聪明的人在玩游戏,游戏规则是这样的:
n堆石子,两个人可以从任意一堆石子中拿任意多个石子(不能不拿),没法拿的人失败。
问最后谁会胜利。

结果是:当 n 堆石子的数量异或和等于 0 时,先手必胜,否则先手必败。

来考虑口胡一个证明:

考虑异或和是 0 的意义。
异或和是 0 代表着对于所有石头数的每一位二进制上的数字都有偶数个1。
那么无论先手怎么操作拿掉哪堆石头里的多少个数量。
后手都可以拿去对应的石头数量使得剩下的石头数的每一位二进制上的数字都有偶数个。
显然最后后手会拿下最后石子,此时先手败。

Code#

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

int T,n,m,x,f[10100],a[10010],sg[100010];
bool vis[100010];

int main(){
  scanf("%d",&T);
  while (T--){
    scanf("%d",&n);
    int ans=0;
    for (int i=1; i<=n; i++){
      scanf("%d",&a[i]);
      ans^=a[i];
    }
    if (ans) printf("Yes\n");
    else printf("No\n"); 
  }
}

阶梯 Nim 游戏#

给出这种 Nim 游戏的题目描述:

给你一个 n 层的楼梯,每个台阶上都有一堆石子 ai
每次把一个台阶上的至少一个石子搬运到它的上一层台阶,不能操作的人输。
玩游戏的两个人都是绝顶聪明

这里给出结论(反正我也不会证明):

一个状态是必胜态,当且仅当奇数层节点的 ai 的按位异或和不为 0

代码的话,具体看题目吧。

高手过招-巧妙的阶梯 Nim 【题解】
POI 2009 阶梯 Nim 基础题

作者:Aonynation

出处:https://www.cnblogs.com/Oier-GGG/p/16187790.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Aonynation  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示