• 编程之美 set 17 拈游戏分析 (2)


    题目

    有 N 块石头河两个玩家 A 和 B. A 先将石头分成若干堆, 然后按照 BABABA... 的顺序轮流取石块, 能将剩下的石头依次取光的玩家获胜. 每次取石头时, 每个玩家只能取一堆的 m(m>=1) 个石头

    思路

    1. 依然举例子.

    当 N = 1 时, 输. N = 2 时, 可以分成 1, 1. 赢

    当 N = 3 时, 分成 1, 2. 输

    当 N = 4 时, 分成 2, 2, 赢

    当 N = 5 时, (1,1,3) (1,2,2) (2,3) 都是输

    总结

    1. 稳赢叫做安全局面. 能一步跳到安全局面的叫做不安全局面. 不安全局面都是稳输的

    2. 安全局面不能直接跳到安全局面, 即安全局面的任何走动都会跳到不安全局面

    3. 不安全局面总可以一步跳到安全局面

    因此当 N 为偶数时, 总是安全局面. 总是可以走到 (i,i) 的局面, 而 (1,1) 又是安全局面

    当有奇数个时, 摆放成全1的形式, 总是先拿的赢

    4. 使用亦或运算

    当 M 为偶数时, 我们的取胜策略是把 M 分成相同的两份, 这样就能取胜

    开始 (M1, M1) XOR(M1,M1) = 0

    中途 (M1, M2) XOR(M1,M2) != 0

    我方 (....)                          = 0

    最终 我方胜

    当 M 为奇数时, 摆放成全 1 的形式, 先拿着必赢

    当 M 为奇数时, 

    开始 (M1, M2...Mn) XOR(...) != 0 比如不为 0 , 因为至少有 1 位为1

    而当 XOR != 0 时, 总是可以将其一步变成 0

    而 XOR == 0 时, 任意的挪动都会将其变成非 0

    所以, 当 M 为奇数时, 先拿着必赢

  • 相关阅读:
    poj 1113 Wall 凸包的应用
    NYOJ 78 圈水池 (入门级凸包)
    Monotone Chain Convex Hull(单调链凸包)
    poj Sudoku(数独) DFS
    poj 3009 Curling 2.0(dfs)
    poj 3083 Children of the Candy Corn
    Python join()方法
    通过FISH和下一代测序检测肺腺癌ALK基因融合比较
    华大病原微生物检测
    NGS检测ALK融合大起底--转载
  • 原文地址:https://www.cnblogs.com/xinsheng/p/3570501.html
Copyright © 2020-2023  润新知