Nim游戏 模板+拓展 博弈论+sg函数

Posted 行码棋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nim游戏 模板+拓展 博弈论+sg函数相关的知识,希望对你有一定的参考价值。

Nim游戏

思路:

先上结论: 对于 a 1 , a 2 , a 3 . . . a n − 1 , a n a_1,a_2,a_3...a_{n-1},a_{n} a1,a2,a3...an1,an每堆石头

  • 如果 a 1 ⊕ a 2 ⊕ a 3 ⊕ . . . ⊕ a n = 0 a_1\\oplus a_2 \\oplus a_3 \\oplus... \\oplus a_n = 0 a1a2a3...an=0一定先手必败
  • 如果 a 1 ⊕ a 2 ⊕ a 3 ⊕ . . . ⊕ a n ≠ 0 a_1 \\oplus a_2 \\oplus a_3 \\oplus... \\oplus a_n \\neq 0 a1a2a3...an=0一定先手必胜

注意: ⊕ \\oplus 为异或符号

开始证明:

  • a 1 , a 2 , a 3 . . . a n a_1 ,a_2 ,a_3...a_n a1,a2,a3...an都为0时,为失败状态,此时所有数相互异或结果为0
  • a 1 ⊕ a 2 ⊕ a 3 ⊕ . . . ⊕ a n ≠ 0 a_1 \\oplus a_2 \\oplus a_3 \\oplus... \\oplus a_n \\neq 0 a1a2a3...an=0
    我们假设 a 1 ⊕ a 2 ⊕ a 3 ⊕ . . . ⊕ a n = x a_1\\oplus a_2 \\oplus a_3 \\oplus... \\oplus a_n = x a1a2a3...an=x
    那么x最高位是1的二进制位上,必然存在一个数 a i a_i ai的这一位也是1,为什么呢?因为我们可以发现,在某个二进制位上,当存在奇数个1时(最后剩下一个1异或不掉,1异或0还是1嘛),结果就为1,存在偶数个1时(两个1互相异或,最后都为0),结果就为0
    然后对于这个 a i a_i ai,得出结论 a i ⊕ x < a i a_i \\oplus x < a_i aix<ai, 因为 x x x的最高位为1, a i a_i ai对应位置也为1,异或一下,这位就变为0,那么数就变小了,不管后面的二进制位怎么异或,高位为1的二进制数始终大于低位全为1的二进制数(比如说1000大于0111,即16大于15)
    然后我们就可以拿走一定数目的石头让这个数 a i a_i ai变成 a i ⊕ x a_i \\oplus x aix
    另一方 a 1 ⊕ a 2 ⊕ a 3 ⊕ . . . a i ⊕ x . . . ⊕ a n = a 1 ⊕ a 2 ⊕ a 3 ⊕ . . . a i . . . ⊕ a n ⊕ x = x ⊕ x = 0 a_1 \\oplus a_2 \\oplus a_3 \\oplus...a_i \\oplus x... \\oplus a_n = a_1 \\oplus a_2 \\oplus a_3 \\oplus...a_i ... \\oplus a_n \\oplus x = x\\oplus x =0 a1a2a3...aix...an=a1a2a3...ai...anx=xx=0,
    那下一步就变为所有数的异或都不会为0,然后另一方必然取出些石头,使最后的异或不为0,那么先手就可以进行相同的操作了,最终先手始终是所有数异或不为0,后手始终异或为0,最终必然取完石子,异或为0的一定是后手。
    故先手必胜
  • a 1 ⊕ a 2 ⊕ a 3 ⊕ . . . ⊕ a n = 0 a_1\\oplus a_2 \\oplus a_3 \\oplus... \\oplus a_n = 0 a1a2a3...an=0时,怎样拿最后的异或都不会是0
    反证法:
    假设是0
    a 1 ⊕ a 2 ⊕ a 3 ⊕ . . . a i . . ⊕ a n = 0 a_1\\oplus a_2 \\oplus a_3 \\oplus...a_i.. \\oplus a_n = 0 a1a2a3...ai..an=0
    a 1 ⊕ a 2 ⊕ a 3 ⊕ . . . a i ′ . . ⊕ a n = 0 a_1\\oplus a_2 \\oplus a_3 \\oplus...a_i^{'}.. \\oplus a_n = 0 a1a2a3...ai..博弈论 SG函数

    博弈论进阶之Anti-SG游戏与SJ定理

    BZOJ1022 [SHOI2008]小约翰的游戏John (博弈论)

    Nowcoder 挑战赛23 B 游戏 ( NIM博弈SG函数打表 )

    最优博弈:Nim游戏,SG函数

    POJ 2960 S-Nim 博弈论 sg函数