LeetCode-810.黑板異或游戲

810.黑板異或游戲(博弈論)

1.題目描述

??黑板上寫著一個非負(fù)整數(shù)數(shù)組 nums[i] 狡刘。Alice 和 Bob 輪流從黑板上擦掉一個數(shù)字襟诸,Alice 先手瓦堵。如果擦除一個數(shù)字后,剩余的所有數(shù)字按位異或運算得出的結(jié)果等于 0 的話歌亲,當(dāng)前玩家游戲失敗菇用。 (另外,如果只剩一個數(shù)字陷揪,按位異或運算得到它本身惋鸥;如果無數(shù)字剩余,按位異或運算結(jié)果為 0悍缠。)
??換種說法就是卦绣,輪到某個玩家時,如果當(dāng)前黑板上所有數(shù)字按位異或運算結(jié)果等于 0飞蚓,這個玩家獲勝滤港。
??假設(shè)兩個玩家每步都使用最優(yōu)解,當(dāng)且僅當(dāng) Alice 獲勝時返回 true趴拧。
?原題鏈接:https://leetcode-cn.com/problems/chalkboard-xor-game

2.簡析

??這是leetcode一道hard難度的博弈論題溅漾,剛好復(fù)習(xí)完Y總的博弈論,拿這道題做一個練習(xí)加強(qiáng)著榴。
??首先添履,雖然博弈論這個問題本身很難,但是一般在筆試面試算法題中都只涉及一些簡單的博弈論脑又,即先手必贏或者先手必輸暮胧。而先手必贏和必輸之間又存在一定的轉(zhuǎn)化關(guān)系,想做出博弈論類的題目问麸,則必須弄清楚先手必勝和先手必敗之間的狀態(tài)轉(zhuǎn)移關(guān)系往衷。

先手必贏:一定可以執(zhí)行某個操作后轉(zhuǎn)移到先手必輸狀態(tài);
先手必輸:不管如何操作一定會轉(zhuǎn)移到先手必贏狀態(tài)口叙;

??來看回本題炼绘,首先嗅战,我們假定數(shù)組所有數(shù)字異或為prexor妄田,那么其先手必贏狀態(tài)有兩種:

  1. prexor = 0,則先手必贏驮捍;
  2. prexor != 0疟呐,nums.size()\%2==0,這種情況东且,nums中一定存在一個不等于prexor的數(shù)(如果不存在這個數(shù)启具,由數(shù)組長度于是偶數(shù),那么prexor必為0)珊泳,因此先手總可以去掉一個不等于prexor的數(shù)N_x鲁冯,使得prexor^N_x != 0拷沸,從而進(jìn)入先手必敗狀態(tài)(prexor != 0,nums.size()\%2==1);

??而先手必敗狀態(tài)如下:

滿足prexor!=0薯演,nums.size()\%2==1撞芍,在這種情況下,要么先手轉(zhuǎn)為上述的先手必贏狀態(tài)1跨扮,要么轉(zhuǎn)為先手必贏狀態(tài)2序无,因此這種情況下先手是必敗的。

3.狀態(tài)轉(zhuǎn)移圖
狀態(tài)轉(zhuǎn)移示意圖
4.代碼示例
class Solution {
public:
    bool xorGame(vector<int>& nums) {
        int prexor = 0;
        for(int num:nums) prexor ^= num;
        return prexor==0 || nums.size()%2==0;
    }
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末衡创,一起剝皮案震驚了整個濱河市帝嗡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌璃氢,老刑警劉巖哟玷,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異一也,居然都是意外死亡碗降,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進(jìn)店門塘秦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讼渊,“玉大人,你說我怎么就攤上這事尊剔∽茫” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵须误,是天一觀的道長挨稿。 經(jīng)常有香客問我,道長京痢,這世上最難降的妖魔是什么奶甘? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮祭椰,結(jié)果婚禮上臭家,老公的妹妹穿的比我還像新娘。我一直安慰自己方淤,他們只是感情好钉赁,可當(dāng)我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著携茂,像睡著了一般你踩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天带膜,我揣著相機(jī)與錄音吩谦,去河邊找鬼。 笑死膝藕,一個胖子當(dāng)著我的面吹牛逮京,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播束莫,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼懒棉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了览绿?” 一聲冷哼從身側(cè)響起策严,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎饿敲,沒想到半個月后妻导,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡怀各,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年倔韭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瓢对。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡寿酌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出硕蛹,到底是詐尸還是另有隱情醇疼,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布法焰,位于F島的核電站秧荆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏埃仪。R本人自食惡果不足惜乙濒,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望卵蛉。 院中可真熱鬧颁股,春花似錦、人聲如沸毙玻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽桑滩。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間运准,已是汗流浹背幌氮。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留胁澳,地道東北人该互。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像韭畸,于是被迫代替她去往敵國和親宇智。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,554評論 2 349

推薦閱讀更多精彩內(nèi)容