NIM取子游戏是由两个人面对若干堆硬币(或石子,或。。)进行的游戏,游戏由两个人进行,设有k>=1堆硬币,各堆含有n1,n2,n3,n4.....,nk个硬币,游戏的目的就是选取最后剩下的硬币。游戏规则如下:

1)游戏人交替进行游戏;

2)当轮到每个游戏人取子时,选择这些硬币中的一堆,并从所选的堆中取走至少一枚硬币(可以将所选堆中所有硬币全部取走剩下一个空堆)。

当所有堆变成空堆时,游戏结束。最后取子的人(即能够取走最后一堆中的所有硬币的人)获胜。

这个问题中的变量是堆数k和各堆的硬币数n1,n2,n3,。。,nk,确定游戏人1还是游戏人2获胜以及游戏人应该如何取子才能获胜。

将每个堆的硬币数ni表示成基为2的数:

n1=as。。a1a0

n2=bs....b1b0

.......

nk=rs...r1r0

我们通过在前面补0的办法可以假设,所有各堆的大小都是具有相同位数的一2为基的数。我们称游戏是平衡的当且仅当

as+bs+...+rs是偶数

.......

ai+bi+...+ri是偶数

.......

a1+b1+...+r1是偶数

a0+b0+...+r0是偶数

如果游戏不是平衡的,那么就称游戏是非平衡的。如果ai+bi+...+ri是偶数,那么就称第i位是平衡的,否则就称为非平衡的。

结论是:

游戏人1能够在非平衡NIM取子游戏中取得胜利,而游戏人2能够在平衡NIM取子游戏中取胜。

设NIM游戏是非平衡的。令最大的非平衡位位第j位。那么,游戏人1用这样一种方法取子,使得留给游戏人2的游戏是平衡的取子游戏。令j是是最大非平衡位,游戏人1选择第j位是1的一个堆,然后从所选的堆中取走一些硬币使得游戏成为平衡的游戏。此后,无论游戏人2如何取子,游戏均是不平衡的,游戏人1取硬币总是使得游戏是平衡的,那么游戏人1就可以取得胜利。如果游戏从平衡状态开始,游戏人1取走一些硬币后,使得游戏变为非平衡,游戏人2取硬币使游戏变得平衡,从而可以取得胜利。

下面举一个简单的例子

硬币个数 2^3=8 2^2=4 2^1=2 2^0=1
11 1 0 1 1
6 0 1 1 0
10 1 0 0 0
8 1 0 0 0

从表中可以看出,,简单的看就是第一列,第二列,第四列1的个数是奇数,游戏是非平衡的,最大非平衡位是2^3=8,因此取一个这个位是1的进行取硬币,这里取11个硬币的堆,取5个,使得游戏变为平衡的,如下

硬币个数 2^3=8 2^2=4 2^1=2 2^0=1
4 0 1 1 0
6 0 1 1 0
10 1 0 0 0
8 1 0 0 0

如此进行下去,游戏人最终会取得胜利。

NIM游戏策略的更多相关文章

  1. POJ 1704 Georgia and Bob (Nim游戏变形)

    题目:http://poj.org/problem?id=1704 思路:Nim游戏策略,做如下转换,如果N是偶数,则两两配对,将两个数之间的格子数(距离)看做成这一堆石头的数量. 如果N是奇数,则将 ...

  2. BZOJ 3105 [CQOI2013]新Nim游戏 ——线性基

    [题目分析] 神奇的题目,两人都可以第一次取走足够多堆的石子. nim游戏的规则是,如果异或和为0,那么就先手必输,否则先手有必胜策略. 所以只需要剩下一群异或和为0就可以了. 先排序,线性基扫一遍即 ...

  3. 编程之美----NIM游戏

    : 博弈游戏·Nim游戏 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 今天我们要认识一对新朋友,Alice与Bob.Alice与Bob总是在进行各种各样的比试,今天他 ...

  4. Nim游戏变种——取纽扣游戏

    (2017腾讯实习生校招笔试题)Calvin和David正在玩取纽扣游戏,桌上一共有16个纽扣,两人轮流来取纽扣,每人每次可以选择取1个或3个或6个(不允许不取),谁取完最后的纽扣谁赢.Cavin和D ...

  5. 【bzoj3150】 cqoi2013—新Nim游戏

    www.lydsy.com/JudgeOnline/problem.php?id=3105 (题目链接) 题意 在第一个回合中,第一个游戏者可以直接拿走若干个整堆的火柴.可以一堆都不拿,但不可以全部拿 ...

  6. (转载)Nim游戏博弈(收集完全版)

    Nim游戏的概述: 还记得这个游戏吗?给出n列珍珠,两人轮流取珍珠,每次在某一列中取至少1颗珍珠,但不能在两列中取.最后拿光珍珠的人输.后来,在一份资料上看到,这种游戏称为“拈(Nim)”.据说,它源 ...

  7. Nim游戏(组合游戏Combinatorial Games)

    http://baike.baidu.com/view/1101962.htm?fr=aladdin Nim游戏是博弈论中最经典的模型(之一),它又有着十分简单的规则和无比优美的结论 Nim游戏是组合 ...

  8. Nim游戏博弈

    Nim游戏的概述: 还记得这个游戏吗? 给出n列珍珠,两人轮流取珍珠,每次在某一列中取至少1颗珍珠,但不能在两列中取.最后拿光珍珠的人输. 后来,在一份资料上看到,这种游戏称为"拈(Nim) ...

  9. BZOJ 1874 取石子游戏 (NIM游戏)

    题解:简单的NIM游戏,直接计算SG函数,至于找先手策略则按字典序异或掉,去除石子后再异或判断,若可行则直接输出. #include <cstdio> const int N=1005; ...

随机推荐

  1. dubbo的中文官网

    https://dubbo.gitbooks.io/dubbo-user-book/content/preface/background.html

  2. Ubuntu 16.04使用timedatectl进行管理时间(UTC/CST)(服务器/桌面)

    说明:16.04开始,systemd接管了系统之后就不再使用/etc/default/rcS和ntpdate.dpkg-reconfigure tzdata进行时间的管理,所以在这些地方设置是无效的, ...

  3. Vue服务端渲染 VS Vue浏览器端渲染)

    Vue 2.0 开始支持服务端渲染的功能,所以本文章也是基于vue 2.0以上版本.网上对于服务端渲染的资料还是比较少,最经典的莫过于Vue作者尤雨溪大神的 vue-hacker-news.本人在公司 ...

  4. debian下QT4编程环境的建立

    转:http://moosewoler.blog.163.com/blog/static/6986605200801013442336/ QT是一款跨平台的C++编程framework.QT的主要特性 ...

  5. 设计模式之桥接模式(php实现)

    github地址:https://github.com/ZQCard/design_pattern /** * 桥接模式 * 优点: * 1.分离抽象接口及其实现部分.提高了比继承更好的解决方案. * ...

  6. 机器学习第3课:线性代数回顾(Linear Algebra Review)

    3.1  矩阵和向量 如图:这个是 4×2 矩阵,即 4 行 2 列,如 m 为行,n 为列,那么 m×n 即 4×2 矩阵的维数即行数×列数 矩阵元素(矩阵项): Aij 指第 i 行,第 j 列的 ...

  7. 2017.7.21 Linux中ELK服务后台运行方式

    通过 2017.7.18 linux下ELK环境搭建 搭建好服务于之后,一旦按下Ctrl+C或者退出登录会话,服务的进程就随之停止了.要长期在后台运行此程序,有几种方式: 1 nohup 输入Ctrl ...

  8. 如何看一个VC工程具体是什么工程?

    VC6等可以创建MFC, Win32等工程,拿到一个工程,怎么判断是什么工程呢? VC6全文检索看看有没有theApp 如果有一般就是MFC的 (VS?)看看工程设置,入口点函数写的是什么,/subs ...

  9. Tomcat 编码不一致导致乱码

    众所周知,Tomcat是一个基于HTTP协议的Java应用服务器(非Web服务器),也是一个Servlet容器. 一般我们会基于使用HTTP协议的Post或Get方法来传递内容或参数,中间会涉及一些编 ...

  10. 使用WIFI连接android进行调试和adb操作

    本人需要wifi连接android进行调试的原因主要是要经常用到IDA pro进行调试,但手头有的IDA Pro版本只是windows的,开发可能更多用Mac OS X了,来回拔插.调试很不方便,所以 ...