2029. 石子游戏 IX
2029. 石子游戲 IX
Alice 和 Bob 再次設(shè)計(jì)了一款新的石子游戲。現(xiàn)有一行 n 個(gè)石子,每個(gè)石子都有一個(gè)關(guān)聯(lián)的數(shù)字表示它的價(jià)值。給你一個(gè)整數(shù)數(shù)組 stones ,其中 stones[i] 是第 i 個(gè)石子的價(jià)值。
Alice 和 Bob 輪流進(jìn)行自己的回合,Alice 先手。每一回合,玩家需要從 stones 中移除任一石子。
如果玩家移除石子后,導(dǎo)致 所有已移除石子 的價(jià)值 總和 可以被 3 整除,那么該玩家就 輸?shù)粲螒?。
如果不滿足上一條,且移除后沒有任何剩余的石子,那么 Bob 將會(huì)直接獲勝(即便是在 Alice 的回合)。
假設(shè)兩位玩家均采用 最佳 決策。如果 Alice 獲勝,返回 true ;如果 Bob 獲勝,返回 false 。
解題思路
因?yàn)槿绻婕乙瞥雍?#xff0c;導(dǎo)致 所有已移除石子 的價(jià)值 總和 可以被 3 整除,那么該玩家就 輸?shù)粲螒?。所以我們已移除石頭和3的整除關(guān)系就可以了,所以我們只需要把石頭分為3類,mod3為0,1,2的三類,稱為mod1,mod2和mod3,mod1和mod2兩類的石頭相加必然會(huì)被3整除,而已經(jīng)移除的石頭總數(shù)在移除的過程中是不斷變化狀態(tài)的,例如原來是mod1狀態(tài),移除一堆mod1狀態(tài)的石頭后,就會(huì)轉(zhuǎn)化為mod2狀態(tài),為了使得不產(chǎn)生mod0狀態(tài),Alice和BOb的最佳拿法必然是
Alice先拿mod1或者mod2,以mod1為例,11212121212,產(chǎn)生12循環(huán),0可以隨意穿插,不影響結(jié)果,一旦哪一方不能繼續(xù)產(chǎn)生12循環(huán),那方就失敗
代碼
class Solution { public:bool stoneGameIX(vector<int> stones) {vector<int> a(3);for (auto i:stones) a[i%3]++;vector<int> b{a[0],a[2],a[1]};return check(a)|check(b);}bool check(vector<int> a){if (a[1]==0) return false;a[1]--;int t=min(a[1],a[2])*2+1+a[0];if (a[1]>a[2]){a[1]--;t++;}return t%2==1&&a[1]!=a[2];} };總結(jié)
以上是生活随笔為你收集整理的2029. 石子游戏 IX的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 女人梦到油菜花好不好
- 下一篇: 397. 整数替换