廢話
這是一個過於經典且過於常見的博弈論模型,入門博弈論的話,首先肯定是要知道這個的。
正題
遊戲的規則:有 堆石子,第 堆石子有 個,每次可以從某一堆中取走若干個,先後手輪流取,最後無石子可取的人負。
首先給出結論:將這 堆石子的數量異或起來(即 ),假如不爲 ,那麼先手必勝,否則先手必敗。
由於這東西的證明需要用到二進制,所以下面的證明都在二進制意義下討論。
證明
首先要知道兩個定義:
- 必勝態:雙方足夠聰明的情況下,在該狀態時擁有操作權者必勝
- 必敗態:雙方足夠聰明的情況下,在該狀態時擁有操作權者必敗
以及一些基礎知識:如果一個狀態能轉移到任意一個必敗態,那麼該狀態就是必勝態,如果不能,就是必敗態。
在 遊戲中,異或和不爲 就是必勝態,否則是必敗態。
先考慮必勝態怎麼必勝:
假設他們異或起來爲 ,且 的最高位爲第 位,那麼至少存在一個 ,滿足 的第 位是 ,那麼我們只需要讓 異或上 即可,由於 的第 位是 ,所以 異或 肯定是減少了。
異或完後,所有石子的異或和就變成了 ,也就是必敗態,由於能轉移到必敗態,所以一開始的狀態爲必勝態。
再考慮必敗態爲什麼必敗:
其實這個就簡單很多了……由於此時異或和爲 ,不管怎麼拿,拿完之後肯定不爲 ,也就是說,這個狀態只能轉移到必勝態,那麼這個狀態就是必敗態了。
舉個栗子
比如現在有 四堆石子,在二進制下就是 ,他們的異或和爲 ,也就是 。
此時先手操作, 即 的最高位是第三位,找到第三位是 的數:,讓它異或上 ,得到的就是 ,那麼四堆石子數變成 ,此時他們的異或和爲 ,滿足要求,van美。
拓展題
(來自師兄的一場模擬賽)
題目大意:有一棵 個節點的樹, 號點爲根節點,其它點上分別放有若干個石子,兩個人輪流操作,每次可以將某個節點上的若干個石子移動到這個節點的父親上面,無法操作者負,問先手是否必勝。
題解:
觀察發現,假如設根節點的深度爲 ,那麼深度爲奇數的節點上的石子其實不影響答案,因爲如果移動這上面的石子,那麼另一個人再次移動這堆石子即可,這堆石子就永遠在深度爲奇數的節點上,若干次移動後就到了根節點,然而他們的移動並不會更改先後手順序。
所以我們只需要考慮深度爲偶數的節點上的石子即可,如果移動深度爲偶數的節點上的石子,那麼移動完之後這堆石子肯定會在奇數節點上,也就是說,這堆石子沒用了。這等價於我們取走了這些石子。
誒,是不是開始很眼熟了?沒錯,這就是一個 遊戲,不過不是用到所有的石子,只用到深度爲偶數的節點上的石子罷了。
emm,簡單吧,這就講完啦qwq。