Nim遊戲詳解

廢話

這是一個過於經典且過於常見的博弈論模型,入門博弈論的話,首先肯定是要知道這個的。

正題

NimNim 遊戲的規則:有 nn 堆石子,第 ii 堆石子有 aia_i 個,每次可以從某一堆中取走若干個,先後手輪流取,最後無石子可取的人負。

首先給出結論:將這 nn 堆石子的數量異或起來(即 a1 xor a2 xor ... xorxna_1~xor~a_2~xor ~...~xor x_n),假如不爲 00,那麼先手必勝,否則先手必敗。

由於這東西的證明需要用到二進制,所以下面的證明都在二進制意義下討論。

證明

首先要知道兩個定義:

  1. 必勝態:雙方足夠聰明的情況下,在該狀態時擁有操作權者必勝
  2. 必敗態:雙方足夠聰明的情況下,在該狀態時擁有操作權者必敗

以及一些基礎知識:如果一個狀態能轉移到任意一個必敗態,那麼該狀態就是必勝態,如果不能,就是必敗態。

NimNim 遊戲中,異或和不爲 00 就是必勝態,否則是必敗態。

先考慮必勝態怎麼必勝:

假設他們異或起來爲 k(k0)k (k\neq 0),且 kk 的最高位爲第 pp 位,那麼至少存在一個 aia_i,滿足 aia_i 的第 pp 位是 11,那麼我們只需要讓 aia_i 異或上 kk 即可,由於 aia_i 的第 pp 位是 11,所以 aia_i 異或 kk 肯定是減少了。

異或完後,所有石子的異或和就變成了 00,也就是必敗態,由於能轉移到必敗態,所以一開始的狀態爲必勝態。

再考慮必敗態爲什麼必敗:

其實這個就簡單很多了……由於此時異或和爲 00,不管怎麼拿,拿完之後肯定不爲 00,也就是說,這個狀態只能轉移到必勝態,那麼這個狀態就是必敗態了。


舉個栗子

比如現在有 1,3,2,61,3,2,6 四堆石子,在二進制下就是 001,011,010,110001,011,010,110,他們的異或和爲 110110,也就是 66

此時先手操作,kk111111 的最高位是第三位,找到第三位是 11 的數:66,讓它異或上 66,得到的就是 00,那麼四堆石子數變成 1,3,2,01,3,2,0,此時他們的異或和爲 00,滿足要求,van美。

拓展題

(來自師兄的一場模擬賽)

題目大意:有一棵 nn 個節點的樹,11 號點爲根節點,其它點上分別放有若干個石子,兩個人輪流操作,每次可以將某個節點上的若干個石子移動到這個節點的父親上面,無法操作者負,問先手是否必勝。

題解:

觀察發現,假如設根節點的深度爲 11,那麼深度爲奇數的節點上的石子其實不影響答案,因爲如果移動這上面的石子,那麼另一個人再次移動這堆石子即可,這堆石子就永遠在深度爲奇數的節點上,若干次移動後就到了根節點,然而他們的移動並不會更改先後手順序。

所以我們只需要考慮深度爲偶數的節點上的石子即可,如果移動深度爲偶數的節點上的石子,那麼移動完之後這堆石子肯定會在奇數節點上,也就是說,這堆石子沒用了。這等價於我們取走了這些石子。

誒,是不是開始很眼熟了?沒錯,這就是一個 NimNim 遊戲,不過不是用到所有的石子,只用到深度爲偶數的節點上的石子罷了。


emm,簡單吧,這就講完啦qwq。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章