NIM游戏策略
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游戏策略的更多相关文章
- POJ 1704 Georgia and Bob (Nim游戏变形)
题目:http://poj.org/problem?id=1704 思路:Nim游戏策略,做如下转换,如果N是偶数,则两两配对,将两个数之间的格子数(距离)看做成这一堆石头的数量. 如果N是奇数,则将 ...
- BZOJ 3105 [CQOI2013]新Nim游戏 ——线性基
[题目分析] 神奇的题目,两人都可以第一次取走足够多堆的石子. nim游戏的规则是,如果异或和为0,那么就先手必输,否则先手有必胜策略. 所以只需要剩下一群异或和为0就可以了. 先排序,线性基扫一遍即 ...
- 编程之美----NIM游戏
: 博弈游戏·Nim游戏 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 今天我们要认识一对新朋友,Alice与Bob.Alice与Bob总是在进行各种各样的比试,今天他 ...
- Nim游戏变种——取纽扣游戏
(2017腾讯实习生校招笔试题)Calvin和David正在玩取纽扣游戏,桌上一共有16个纽扣,两人轮流来取纽扣,每人每次可以选择取1个或3个或6个(不允许不取),谁取完最后的纽扣谁赢.Cavin和D ...
- 【bzoj3150】 cqoi2013—新Nim游戏
www.lydsy.com/JudgeOnline/problem.php?id=3105 (题目链接) 题意 在第一个回合中,第一个游戏者可以直接拿走若干个整堆的火柴.可以一堆都不拿,但不可以全部拿 ...
- (转载)Nim游戏博弈(收集完全版)
Nim游戏的概述: 还记得这个游戏吗?给出n列珍珠,两人轮流取珍珠,每次在某一列中取至少1颗珍珠,但不能在两列中取.最后拿光珍珠的人输.后来,在一份资料上看到,这种游戏称为“拈(Nim)”.据说,它源 ...
- Nim游戏(组合游戏Combinatorial Games)
http://baike.baidu.com/view/1101962.htm?fr=aladdin Nim游戏是博弈论中最经典的模型(之一),它又有着十分简单的规则和无比优美的结论 Nim游戏是组合 ...
- Nim游戏博弈
Nim游戏的概述: 还记得这个游戏吗? 给出n列珍珠,两人轮流取珍珠,每次在某一列中取至少1颗珍珠,但不能在两列中取.最后拿光珍珠的人输. 后来,在一份资料上看到,这种游戏称为"拈(Nim) ...
- BZOJ 1874 取石子游戏 (NIM游戏)
题解:简单的NIM游戏,直接计算SG函数,至于找先手策略则按字典序异或掉,去除石子后再异或判断,若可行则直接输出. #include <cstdio> const int N=1005; ...
随机推荐
- Combination Sum III - LeetCode
Find all possible combinations of k numbers that add up to a number n, given that only numbers from ...
- [Contest20180418]物理竞赛
题意:在一个三维空间中有一个轴,轴上有一个垂直于轴的半径为$R$的凸透镜(光心在轴上)和$n$个点光源,假设每个点光源发出的$1$单位光都刚好覆盖凸透镜,现在有一个半径为$r$的圆形光屏,问光屏最多能 ...
- 【bzoj4808】【马】二分图最大点独立集+简单感性证明
(上不了p站我要死了,侵权度娘背锅) Description 众所周知,马后炮是中国象棋中很厉害的一招必杀技."马走日字".本来,如果在要去的方向有别的棋子挡住(俗称"蹩 ...
- 九. 常用类库、向量与哈希2.Object类
Object 类位于 java.lang 包中,是所有 Java 类的祖先,Java 中的每个类都由它扩展而来. 定义Java类时如果没有显示的指明父类,那么就默认继承了 Object 类.例如: p ...
- Word交叉引用
第一种:参考文献,用NE插入. 第二种:交叉引用. 先定义新的编号格式[1](主要解决参考文献格式自动编号的问题),感觉但是没有解决缩进的问题,需要Tab. 但是实验发现,通过谷歌学术引用的参考文献插 ...
- Linux用ps命令查找进程PID再用kill命令终止进程的方法
使用linux操作系统,难免遇到一些软件"卡壳"的问题,这时就需要使用linux下强大的kill命令来结束相关进程.这在linux系统下是极其容易的事情,你只需要kill xxx即 ...
- RESTful接口签名认证实现机制
RESTful接口 互联网发展至今,催生出了很多丰富多彩的应用,极大地调动了人们对这些应用的使用热情.但同时也为互联网应用带来了严峻的考验.具体体现在以下几个方面: 1. 部署方式的改变:当用 ...
- 01.Hello Node.js
程序下载:https://files.cnblogs.com/files/xiandedanteng/helloNodejs.rar 关键代码: var http=require('http'); v ...
- CocoaPods安装及相关命令
具体安装参考: http://www.jianshu.com/p/dfe970588f95 http://www.jianshu.com/p/9e4e36ba8574 我就说一个,安装cocoapod ...
- MySQL 事件EVENT
一.用途用于某一时间执行一个事件或周期性执行一个事件. 二.语法CREATE [DEFINER = { user | CURRENT_USER }] EVENT [IF NOT EXISTS] eve ...