日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

2029. 石子游戏 IX

發(fā)布時(shí)間:2023/11/29 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2029. 石子游戏 IX 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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 。

示例 1:輸入:stones = [2,1] 輸出:true 解釋:游戲進(jìn)行如下: - 回合 1:Alice 可以移除任意一個(gè)石子。 - 回合 2:Bob 移除剩下的石子。 已移除的石子的值總和為 1 + 2 = 3 且可以被 3 整除。因此,Bob 輸,Alice 獲勝。示例 2:輸入:stones = [2] 輸出:false 解釋:Alice 會(huì)移除唯一一個(gè)石子,已移除石子的值總和為 2 。 由于所有石子都已移除,且值總和無法被 3 整除,Bob 獲勝。示例 3:輸入:stones = [5,1,2,4,3] 輸出:false 解釋:Bob 總會(huì)獲勝。其中一種可能的游戲進(jìn)行方式如下: - 回合 1:Alice 可以移除值為 1 的第 2 個(gè)石子。已移除石子值總和為 1 。 - 回合 2:Bob 可以移除值為 3 的第 5 個(gè)石子。已移除石子值總和為 = 1 + 3 = 4 。 - 回合 3:Alices 可以移除值為 4 的第 4 個(gè)石子。已移除石子值總和為 = 1 + 3 + 4 = 8 。 - 回合 4:Bob 可以移除值為 2 的第 3 個(gè)石子。已移除石子值總和為 = 1 + 3 + 4 + 2 = 10. - 回合 5:Alice 可以移除值為 5 的第 1 個(gè)石子。已移除石子值總和為 = 1 + 3 + 4 + 2 + 5 = 15. Alice 輸?shù)粲螒?#xff0c;因?yàn)橐岩瞥又悼偤?#xff08;15)可以被 3 整除,Bob 獲勝。

解題思路

因?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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。