编程之美 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 為奇數時, 先拿著必贏
總結
以上是生活随笔為你收集整理的编程之美 set 17 拈游戏分析 (2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redisbook学习笔记(3)数据类型
- 下一篇: 程序安装后依然是老版主页的修改办法