ICG游戏:尼姆游戏异或解法的证明
描述:
尼姆博奕(Nimm Game),有n堆石子,每堆石子有若干石子,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限。取走最后石子的人获胜。
标准解法:
判断:
先计算先手是必胜还是必败:
将每堆石子的数量做二进制异或(即用二进制表示,每个数字的第一位做异或;第二位做异或...),结果如果是0,则必败;否则必胜。
(其实每个二进制位如果有偶数位1,则异或结果是0,否则为1;异或符合结合律,交换律)
做法:
如果是必胜局如何操作:
必胜局则异或结果不是0,操作某一堆,使得异或结果是0。
证明:
这其实是ICG游戏的标准解法。找到P态和N态(也称奇异非奇异局势,平衡态、终态等):
P态:必败态,P态的任一操作都将使局面转为N态;
N态:必胜态,N态可以一步转为P态;
其实不用管上面的理论也行,只有证明以下结论即可:
1.对于一个异或和为0的局面,任一操作都将使其不为0;
2.对于一个异或和不为0的局面,存在一个操作使其为0;
对于1:由于只能操作一个数,至少减一,则有:
如果改变后的数的二进制表示中,1对应的位完全和原来一样,则必定有0改为了1,导致改变后的数大于原数,矛盾。
所以,改变后的数二进制中,至少有1个1变成了0,则改位的异或和改为了1,证毕。
对于2:可以通过改变1的奇偶来改变异或和(可以通过删除1或增加1):
设从高到低,含有奇数列的序号位w1, w2 ,w3...
任意选取最高列中,1所在的数。删除这个1,实际是分配w1 - 1个1给这个数后面的任一列。
则这行中,多出的1删去,少了的补上即可。
如:
5: 0 1 0 1
10:1 0 1 0
1: 0 0 0 1
4: 0 1 0 0
其中奇数号列位4,2,而第四列中,10的最高位的1可删除,删去1(实际是删去8),
后面可任意改变数量,而第二列中也多出1,删去。得0。即10全部取走。
由于0,0,0是异或和为0的状态,只要一直将异或为0的状态交给对方,由于数量一直减少,则自己总能到达0,0,0态,取得胜利。
ICG游戏:尼姆游戏异或解法的证明的更多相关文章
- 一次失败的刷题经历:[LeetCode]292之尼姆游戏(Nim Game)(转)
最近闲来无事刷LeetCode,发现这道题的Accept Rate还是挺高的,尝试着做了一下,结果悲剧了,把过程写下来,希望能长点记性.该题的描述翻译成中文如下: 你正在和你的朋友玩尼姆游戏(Nim ...
- 一次失败的刷题经历:[LeetCode]292之尼姆游戏(Nim Game)
最近闲来无事刷LeetCode,发现这道题的Accept Rate还是挺高的,尝试着做了一下,结果悲剧了,把过程写下来,希望能长点记性.该题的描述翻译成中文如下: 你正在和你的朋友玩尼姆游戏(Nim ...
- HDU 2176 取(m堆)石子游戏 尼姆博弈
题目思路: 对于尼姆博弈我们知道:op=a[1]^a[2]--a[n],若op==0先手必败 一个简单的数学公式:若op=a^b 那么:op^b=a: 对于第i堆a[i],op^a[i]的值代表其余各 ...
- [LeetCode] Nim Game 尼姆游戏
You are playing the following Nim Game with your friend: There is a heap of stones on the table, eac ...
- leetCode之旅(5)-博弈论中极为经典的尼姆游戏
题目介绍 You are playing the following Nim Game with your friend: There is a heap of stones on the table ...
- BZOJ1022[SHOI2008]小约翰的游戏——anti-SG(反尼姆博弈)
题目描述 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不取,我们规定取到 ...
- POJ 2234 Matches Game (尼姆博弈)
题目链接: https://cn.vjudge.net/problem/POJ-2234 题目描述: Here is a simple game. In this game, there are se ...
- Nim游戏(尼姆博弈)
这里是尼姆博弈的模板,前面的博弈问题的博客里也有,这里单列出来. 有N堆石子.A B两个人轮流拿,A先拿.每次只能从一堆中取若干个,可将一堆全取走,但不可不取,拿到最后1颗石子的人获胜.假设A B都非 ...
- 简单易懂的博弈论讲解(巴什博弈、尼姆博弈、威佐夫博弈、斐波那契博弈、SG定理)
博弈论入门: 巴什博弈: 两个顶尖聪明的人在玩游戏,有一堆$n$个石子,每次每个人能取$[1,m]$个石子,不能拿的人输,请问先手与后手谁必败? 我们分类讨论一下这个问题: 当$n\le m$时,这时 ...
随机推荐
- New Concept English Two 31 85
$课文83 大选之后 904. The former Prime Minister, Mr. Wentworth Lane, was defeated in the recent elections ...
- LNMP架构下的nginx、mysql、php的源码安装
一.LNMP的介绍 LNMP就是Linux+Nginx+Mysql+Php这种网站服务架构.Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统,常见版本有:centos.ubun ...
- PyalgoTrade 技术组合计算(四)
可以各种技术可以组合起来.它们被建模为DataSeries.例如,在收盘价之上获得RSI以上的计算SMA,是非常简单的: from pyalgotrade import strategy from p ...
- (转)类的sizeof
来源:http://www.360doc.com/content/12/0315/17/3349869_194600377.shtml
- graphql-binding openapi 集成demo
类似的将openapi 转换为graphql api 的也有 https://github.com/yarax/swagger-to-graphql 基本项目 参考代码 https://github. ...
- cocostudio 使用教程
项目配置 http://blog.csdn.net/chinahaerbin/article/details/21559351 项目配置如下: 还要引入命名空间之类的: #include " ...
- Hive之 hive的三种使用方式(CLI、HWI、Thrift)
Hive有三种使用方式——CLI命令行,HWI(hie web interface)浏览器 以及 Thrift客户端连接方式. 1.hive 命令行模式 直接输入/hive/bin/hive的执行程 ...
- 【linux】centos6.5上bugzilla的搭建
1.安装依赖包 CentOS 6.5默认安装了apche,perl ,需要安装httpd mod_ssl mysql-server mysql php-mysql gcc perl* mod_perl ...
- 错误 1 缺少编译器要求的成员“System.Runtime.CompilerServices.ExtensionAttrib
错误 1 缺少编译器要求的成员“System.Runtime.CompilerServices.ExtensionAttrib 删除Newtonsoft.Json.dll 引用 ,再重新引用即可. 原 ...
- 2019第十届蓝桥杯C/C++
这是我第一次参加蓝桥杯比赛,比完后,有点低于预期,自己的发挥低于预期,赛事水准也低于预期. 教室里面很多同学的电脑出现问题,举办学校也没有完善的应急方案,有一部分同学11点钟才可以做题. 附题目pdf ...