nim遊戲及其變種

2022-05-01 03:54:08 字數 1438 閱讀 3045

nim遊戲:

n堆石子,操作為可以從任意一堆拿走任意正整數個石子,不能操作者輸。問先手勝還是後手勝。

結論:

當n堆石子的個數的亦或為0時,先手必敗;否則先手必勝。

證明:

1,若亦或值不為0,則一定可以通過一步操作讓它變成0.

考慮亦或值最高位的那個1,一定有一堆石子數在那一位是1(否則總的亦或裡的那個1是怎麼來的=-=)。我們讓該堆石子那一位的1變成0,再對該數把總亦或裡剩下的1的位置取反,那麼這堆石子肯定是減少的(因為把乙個高位的1變成0之後,低位再怎麼改變也肯定是減小的)。

2,若亦或值為0,則無法通過乙個操作讓它保持0

貌似是顯然吧...因為改變乙個數之後肯定有些位置從0變成1,有些位置從1變成0.

題目:

乙個n個台階的樓梯,每個樓梯上有ai個石子。操作為可以拿從一層樓梯上拿若干個石子到下一層樓梯(不能不拿),拿到地面上的石子不能再拿。問先手勝還是後手勝。

題解:

通過後手相消的原則,我們可以發現偶數層樓梯上的石子是無效的(因為如果一方從偶數層上拿了若干石子到奇數層,另一方再把它們拿到偶數層就可以了,而地面(第0層)是偶數層,所以最終這些石子是沒有意義的)。

所以這就是奇數層上石子的nim遊戲。

題目:

乙個n個台階的樓梯,每個台階上有ai個石子。操作為可以把乙個石子拿到下面任何乙個台階(或地面),地面上的石子不能再拿。問先手勝還是後手勝。

題解:

把每個石子看做nim遊戲中的一堆即可。

nim-k:

n堆石子。操作為可以從這n堆石子中挑選不超過k堆石子(至少1堆),每堆取任意個(至少1個,不同堆取的石子數可以不同)。問先手勝還是後手勝。

結論:

把每堆石子數轉換成二進位制數後相加(不進製),再把每一位 mod (k+1),若最終每一位都是0,則後手勝,否則先手勝。

證明:

和nim遊戲的證明很像,建議讀者自己想一想(憑各位的聰明才智一定沒有問題的qwq)。

take-and-break game:

n堆石子,每次可以取走一堆石子,然後放入兩堆規模更小的石子(可以為0).最後不能操作的人輸。

題解:

容易看出每堆石子都是單獨的,所以可以用sg定理求解。(還不了解sg定理的同學可以點這裡)

然後列舉x能轉移到的所有狀態,算出這些後繼的sg值後取mex即可。(x的乙個後繼為sgi^sgj,i

本人蒟蒻一枚,若部落格中有錯誤請各位大佬指出qwq

逆序對及其變種

首先看一下逆序對 leetcode 劍指offer 51 在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個 逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。示例 1 輸入 7,5,6,4 輸出 5 限制 0 陣列長度 50000這也是乙個經典問題,而且如果方向沒對的話,是...

RANSAC及其經典變種

近年來學者們不斷在對經典演算法ransac進行各種改進,本文想總結一下近年來ransac演算法的各種改進優化。看到乙個寫得很好的部落格系列,可惜博主沒有繼續寫下去了,很希望博主哪天想起來繼續寫下去,我暫時在這裡做一些簡單補充吧 此處暫時只蒐集到的一些相關文獻,後續隨著學習的增加會再繼續完善 p ra...

nim遊戲簡介

定義p position和n position,其中p代表previous,n代表next。直觀的說,上一次move的人有必勝策略的局面是p position,也就是 後手可保證必勝 或者 先手必敗 現在輪到move的人有必勝策略的局面是n position,也就是 先手可保證必勝 更嚴謹的定義是 ...