[学习笔记]nim游戏
普通nim游戏:
n堆石子,每个人每次对着一堆拿若干个。不能拿者判输。
只有两种情况,先手必胜,先手必败。
先手必胜当且仅当:a1^a2^...^an!=0
证明:
设=x(x不为0),选择最高位和x一样的ai,显然有ai^x<ai
阶梯型nim游戏
阶梯型nim游戏:高度单调的阶梯。每次只能把a[i]中选择x个,放到a[i-1]中,或者把a[1]中扔掉若干个。问有无先手必胜策略。
等价于对奇数堆做nim游戏。
第一次先手,就把奇数堆按照必胜策略移动。偶数堆不管,当做垃圾桶。
如果后手移动奇数堆到偶数堆,就按照奇数堆必胜策略移动。
反之,就把后手移动过来x的奇数堆再往前移动x个。对于奇数堆的状态不变。早晚会把偶数堆移动完。
所以,等价。
反向nim游戏
有 N 堆石子,每次可从一堆石子中拿走任意数量的石子。
两个人轮流拿,谁不能拿谁赢。
上面的必胜和必败都是基于“无法操作者败”这个规则来解释的。
若某组合游戏的胜利条件是“无法操作者胜”的话,必胜态必须满足二者之一:
SG异或和>0且石子数>1的堆数>0
SG异或和=0且石子数>1的堆数=0
证明。。。
Nim-K 游戏
有 N 堆石子,每次可从 K 堆石子中拿走任意数量的石子。
两个人轮流拿,谁不能拿谁输。

证明:
数学归纳法
1.没有石子的时候,一定全部为0
2.如果当前全部为0,最多某一位1的个数变化k个,一定不会全部为0
3.如果当前不全为0,从高位开始往低位找,
如果某一位1的个数为b,之前已经动过的堆数为c,先用c个动过的堆来调整,让b变成0或者k+1,不够用,就从剩下的b的堆把1删去(大概就是先都往0凑,加上新选择的堆还不行的话,那么一定可以直接凑出k+1,直接用c个原来的堆往k+1凑)
删去1的堆一定已经取走,所以后面就可以随便0->1或者1->0了,加入那c个。如果能操作k个,那么一定可以随心所欲了。
证毕。
小例题:


两人之间的距离就是石子数量。都撞上了以后,谁撤,对面立刻怼上去。
[学习笔记]nim游戏的更多相关文章
- cocos2d-x学习笔记(18)--游戏打包(windows平台)
cocos2d-x学习笔记(18)--游戏打包(windows平台) 之前做好的游戏,都是在vs2008下编译执行的.假设说想把游戏公布到网上或者和其它人一起分享游戏,那就得对游戏 ...
- python学习笔记 | 猜拳游戏
''' @author: 人人都爱小雀斑 @time: 2020/3/6 18:52 @desc: 实验结果心得: 1.难点主要在判断谁输谁赢 2.挺好的 ''' import random d={1 ...
- 【Nim 游戏】 学习笔记
前言 没脑子选手随便一道博弈论都不会 -- 正文 Nim 游戏引入 这里给出最简单的 \(Nim\) 游戏的题目描述: \(Nim\) 游戏 有两个顶尖聪明的人在玩游戏,游戏规则是这样的: 有\(n\ ...
- cocos2dx游戏开发——别踩白块学习笔记(二)——经典模式的实现
一.创建GameScene以及GameLayer 就是简单创建一个Scene而已,在此就不多说啦~,可以参照我的打飞机的学习笔记(2). 二.添加一个开始栏 很简单,就是调用Block中的create ...
- cocos2dx游戏开发——微信打飞机学习笔记(三)——WelcomeScene的搭建
一.场景与层的关系: cocos2dx的框架可以说主要由导演,场景,层,精灵来构成: 1.其中导演,意如其名,就是操控整个游戏的一个单例,管理着整个游戏. 2.场景就像电影的一幕剧情,所以说,懂得如何 ...
- cocos2dx游戏开发——微信打飞机学习笔记(七)——Enemy的搭建
一.文件创建~ Enemy.h Enemy.cpp 二.How to do? 由于我是已经完成成个游戏的功能,所以我会将游戏中enemy所需要的很多功能基本上都先考虑到了,如果大家自己在做的时候也许没 ...
- [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计
源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...
- DirectX 11游戏编程学习笔记之8: 第6章Drawing in Direct3D(在Direct3D中绘制)(习题解答)
本文由哈利_蜘蛛侠原创,转载请注明出处.有问题欢迎联系2024958085@qq.com 注:我给的电子版是700多页,而实体书是800多页,所以我在提到相关概念的时候 ...
- 【Unity 3D】学习笔记三十五:游戏实例——摄像机切换镜头
摄像机切换镜头 在游戏中常常会切换摄像机来观察某一个游戏对象,能够说.在3D游戏开发中,摄像头的切换是不可或缺的. 这次我们学习总结下摄像机怎么切换镜头. 代码: private var Camera ...
随机推荐
- redis系列--你真的入门了吗?redis4.0入门~
前言 redis作为nosql家族中非常热门的一员,也是被大型互联网公司所青睐,无论你是开发.测试或者运维,学习掌握它总会为你的职业生涯增色添彩. 当然,你或多或少已经了解redis,但是你是否了解其 ...
- 汇编 AND 运算
AND运算 逻辑与&& 按位与& 一.AND运算 1&&12=1; 12&&0=0; 0&&1=0; 0040100 ...
- Linux 设置core dump
Linux 设置core dump
- P4175 [CTSC2008]网络管理
如果没有修改就是简单主席树,有了修改的话因为主席树维护的是到根的一段路径,所以修改操作会修改子树,也就是连续的一段dfn 所以显然树套树一波就没了 极其好写 #include<bits/stdc ...
- 利用privoxy劫持http网站数据,插入广告,获取用户名,密码
看了几篇privoxy的文章,感觉讲的都不详细,在此整理一遍. 注:本文下面的内容仅讨论思路,作为技术交流之用,请勿用作非法途径. Privoxy是一款带过滤功能的代理服务器,针对HTTP.HTTPS ...
- node基础:文件系统-文件读取
node的文件读取主要分为同步读取.异步读取,常用API有fs.readFile.fs.readFileSync.还有诸如更底层的fs.read,以及数据流(stream),后面再总结下咯~ 直接上简 ...
- Asp.net MVC Razor常见问题及解决方法(转载>云中客)
没有经验的童鞋就是这样磕磕碰碰出来的经验. 1,Datatype的错误提示消息无法自定义 这也许是Asp.net MVC的一个Bug.ViewModel中定义了DataType为Date字段: 1 2 ...
- jmeter:正则表达式的使用
Jmeter中正则关联的使用是可以提取动态变化数据进行传递:关联的方式和提取器有多种,这篇先讲解正则表达式怎么来关联(?) 在需要获取数据的http请求上添加后置处理器 比如提取百度title值: 正 ...
- 企业落地Kubernetes的问题与对策
在当今云计算领域,“容器技术”已经从三四年前的炒作期正式进入了产业落地期,而Kubernetes作为容器平台的标准已经得到了广泛应用. Kubernetes从2014年6月由Google宣布开源,到2 ...
- 基于tensorflow 1.x 的检索机器人chatbot-retrieval
Chatbot-retrieval说基于tensorflow的检索机器人,原版的代码路径是 https://github.com/dennybritz/chatbot-retrieval, 但是在te ...