• [学习笔记]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个,那么一定可以随心所欲了。

    证毕。

    小例题:

    两人之间的距离就是石子数量。都撞上了以后,谁撤,对面立刻怼上去。

  • 相关阅读:
    wnmpa或lnmpa 服务器搭建和原理
    windows 桌面图标 隐藏 小盾牌标志
    C# 执行 CMD 终极稳定解决方案
    比较两个object是否相等
    Microsoft Store 加载失败
    ORA-12514: TNS:监听程序当前无法识别连接描述符中请求的服务
    Win10安装gcc、g++、make
    通过proxifier实现酸酸乳全局代理
    C# 字母转数字
    html中设置锚点定位的几种常见方法(#号定位)
  • 原文地址:https://www.cnblogs.com/Miracevin/p/9831078.html
Copyright © 2020-2023  润新知