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$时,这时 ...
随机推荐
- 探究js正则匹配方法:match和exec
match是字符串方法,写法为:str.match(reg) exec是正则表达式方法,写法为:reg.exec(str) match和exec在匹配成功时返回的都是数组,在没有匹配上时返回的都是nu ...
- 认识 ARM、FPGA
0. ARM ARM:Advanced RISC machine,微处理行业的一家知名企业.适用于多种领域,如嵌入控制,消费.教育类多媒体.DSP和移动式应用. 优势: 功耗低,不容易发热.死机: 3 ...
- Yahoo! Finance财经数据PYTHON临时读取方法
本篇文章转自简书:http://www.jianshu.com/p/85d563d326a9 这段时间在看量化策略,找到了一个比较不错的开源项目,但是yahoo金融的数据源一直没有找到,在网上找到了这 ...
- minio 集群搭建
具体实际的取舍可以参考官方文档,我使用的是4 node 4 driver 模式 环境机器说明 192.168.31.2 192.168.31.3 192.168.31.4 192.168.31.5 ...
- Spring4中@value用法详解
版本:spring-framework-4.1 一.概述 为了简化读取properties文件中的配置值,Spring支持@Value注解的方式来获取,这种方式大大简化了项目的配置,业务中也提高了灵活 ...
- github之本地上传
在打算上传到github之前需要在github上面首先创建一个项目(点击右上角“+”号,点击New repository):
- am335x_y蜂鸣器驱动
修改文件:1.板级文件/arch/arm/mach-omap2/board-am335xevm.c static struct platform_device buzzer_device= { .na ...
- PAT 甲级 1010 Radix (25)(25 分)进制匹配(听说要用二分,历经坎坷,终于AC)
1010 Radix (25)(25 分) Given a pair of positive integers, for example, 6 and 110, can this equation 6 ...
- Linux下搭建企业共享目录方案之------samba
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通 ...
- mysql/oracle ip地址比较
SELECT hub_gid FROM CPP_HUB_IPSEGMENT WHERE IpToLong(#{ip}) BETWEEN IpToLong(ip_begin) AND IpToLong( ...