描述:

尼姆博奕(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游戏:尼姆游戏异或解法的证明的更多相关文章

  1. 一次失败的刷题经历:[LeetCode]292之尼姆游戏(Nim Game)(转)

    最近闲来无事刷LeetCode,发现这道题的Accept Rate还是挺高的,尝试着做了一下,结果悲剧了,把过程写下来,希望能长点记性.该题的描述翻译成中文如下: 你正在和你的朋友玩尼姆游戏(Nim ...

  2. 一次失败的刷题经历:[LeetCode]292之尼姆游戏(Nim Game)

    最近闲来无事刷LeetCode,发现这道题的Accept Rate还是挺高的,尝试着做了一下,结果悲剧了,把过程写下来,希望能长点记性.该题的描述翻译成中文如下: 你正在和你的朋友玩尼姆游戏(Nim ...

  3. HDU 2176 取(m堆)石子游戏 尼姆博弈

    题目思路: 对于尼姆博弈我们知道:op=a[1]^a[2]--a[n],若op==0先手必败 一个简单的数学公式:若op=a^b 那么:op^b=a: 对于第i堆a[i],op^a[i]的值代表其余各 ...

  4. [LeetCode] Nim Game 尼姆游戏

    You are playing the following Nim Game with your friend: There is a heap of stones on the table, eac ...

  5. leetCode之旅(5)-博弈论中极为经典的尼姆游戏

    题目介绍 You are playing the following Nim Game with your friend: There is a heap of stones on the table ...

  6. BZOJ1022[SHOI2008]小约翰的游戏——anti-SG(反尼姆博弈)

    题目描述 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不取,我们规定取到 ...

  7. POJ 2234 Matches Game (尼姆博弈)

    题目链接: https://cn.vjudge.net/problem/POJ-2234 题目描述: Here is a simple game. In this game, there are se ...

  8. Nim游戏(尼姆博弈)

    这里是尼姆博弈的模板,前面的博弈问题的博客里也有,这里单列出来. 有N堆石子.A B两个人轮流拿,A先拿.每次只能从一堆中取若干个,可将一堆全取走,但不可不取,拿到最后1颗石子的人获胜.假设A B都非 ...

  9. 简单易懂的博弈论讲解(巴什博弈、尼姆博弈、威佐夫博弈、斐波那契博弈、SG定理)

    博弈论入门: 巴什博弈: 两个顶尖聪明的人在玩游戏,有一堆$n$个石子,每次每个人能取$[1,m]$个石子,不能拿的人输,请问先手与后手谁必败? 我们分类讨论一下这个问题: 当$n\le m$时,这时 ...

随机推荐

  1. 探究js正则匹配方法:match和exec

    match是字符串方法,写法为:str.match(reg) exec是正则表达式方法,写法为:reg.exec(str) match和exec在匹配成功时返回的都是数组,在没有匹配上时返回的都是nu ...

  2. 认识 ARM、FPGA

    0. ARM ARM:Advanced RISC machine,微处理行业的一家知名企业.适用于多种领域,如嵌入控制,消费.教育类多媒体.DSP和移动式应用. 优势: 功耗低,不容易发热.死机: 3 ...

  3. Yahoo! Finance财经数据PYTHON临时读取方法

    本篇文章转自简书:http://www.jianshu.com/p/85d563d326a9 这段时间在看量化策略,找到了一个比较不错的开源项目,但是yahoo金融的数据源一直没有找到,在网上找到了这 ...

  4. minio 集群搭建

      具体实际的取舍可以参考官方文档,我使用的是4 node 4 driver 模式 环境机器说明 192.168.31.2 192.168.31.3 192.168.31.4 192.168.31.5 ...

  5. Spring4中@value用法详解

    版本:spring-framework-4.1 一.概述 为了简化读取properties文件中的配置值,Spring支持@Value注解的方式来获取,这种方式大大简化了项目的配置,业务中也提高了灵活 ...

  6. github之本地上传

    在打算上传到github之前需要在github上面首先创建一个项目(点击右上角“+”号,点击New repository):

  7. am335x_y蜂鸣器驱动

    修改文件:1.板级文件/arch/arm/mach-omap2/board-am335xevm.c static struct platform_device buzzer_device= { .na ...

  8. 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 ...

  9. Linux下搭建企业共享目录方案之------samba

    Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通 ...

  10. mysql/oracle ip地址比较

    SELECT hub_gid FROM CPP_HUB_IPSEGMENT WHERE IpToLong(#{ip}) BETWEEN IpToLong(ip_begin) AND IpToLong( ...