博弈論

tyccyt發表於2024-11-09

定義

  • 必勝或必勝狀態:僅僅考慮當前的狀態,不考慮的操作人時,一定必勝或必輸
  • \(a\oplus b\)\(a,b\) 在二進位制下,對位取反。

Nim 遊戲

考慮有 \(n\) 堆石子,兩個人輪流來拿走棋子(至少拿一個),拿到最後剩下的一顆棋子的人獲勝。

結論

定義 Nim 和 \(= a_1\oplus a_2\oplus a_3\oplus\dots\oplus a_n\)

當 Nim 和 為 \(0\) 時,該狀態為必敗狀態;反之,則為必勝狀態。

證明:

我們需要三個引理:

  1. 無後繼狀態為必敗狀態

    這個情況只有全 \(0\),同時滿足 \(a_1\oplus a_2\oplus\dots\oplus a_n=0\)

  2. 對於當前狀態 \(a_1\oplus a_2\oplus\dots\oplus a_n\ne0\),一定存在某種移動使得其異或和為 \(0\)

    考慮來構造一下:

    \(a_1\oplus a_2\oplus\dots\oplus a_n=s\),同時設 \(s\) 的在二進位制下,最高位為 \(k\)

    如果我們想使 \(s\) 變為 \(0\),就非常想兩邊同時乘 \(s\)

    但是每次進行一次拿石子必須需要時某個 \(a_i\) 減少,

    所以可以考慮在 \(a_i\) 處拿,則需要證明 \(a_i\oplus s<a_i\) 的。

    現在來想一想異或的定義,發現 \(s\) 最高位為 \(1\) ,則在 \(a_1,a_2\dots,a_n\) 肯定有一個 \(t\) ,使得 \(a_t\) 這一位也是 \(1\)

    那就拿 \(a_t\oplus s\) ,我們又發現最高位變成了 \(0\)

    由於這是最高位,則 \(a_t\)\(k\) 還高的位就不會改變,所以 \(a_t\oplus s\) 一定 \(<a_t\)

    於是就構造出來一組解了。

  3. 對於當前狀態 \(a_1\oplus a_2\oplus\dots\oplus a_n=0\),一定不存在某種移動使得其異或和為 \(0\)

    也就是說,只要有一個 \(a\) 陣列中數的位發生改變,那麼其異或和就不為零了。

SG 函式

相關文章