HDU 1907 John 尼姆博弈

2021-08-05 20:10:17 字數 723 閱讀 8571

**

近期在看博弈系列,搞完了巴什博弈、威佐夫博弈,接下來就是這個尼姆博弈。

這一系列博弈型別可以概括為:

巴什博弈:從一堆石子中拿石子,一次拿1~m個。

威佐夫博弈:從兩堆石子中拿石子,方法①任選一堆石子拿k個石子(k≥1),方法②從兩堆石子中拿相同數量的石子(當然所拿的數要≥1)

尼姆博弈:從三堆石子中拿石子,每次任選一堆拿任意數目(≥1)的石子。

這些當然是誰先那光,誰獲勝。

尼姆博弈解法,和二進位制有關。

反正我不知道他們怎麼推得,只會用。o(╯□╰)o。。。

給出的數 用異或加起來,若等於0,則為奇異態(必勝態)。

這道題有些不一樣,如果john吃的是某個盒子最後一顆,那就判定john為敗。

所以,這道題分為兩種情況討論:

①若所有堆的數量都為1。則根據奇偶來判斷誰勝。

②其他情況,將所有資料異或起來,判斷是否為奇異態。

#includeusing namespace std;

int main()

if(flag)

n&1?puts("brother"):puts("john"); // 如果全是1,按照奇偶判斷誰獲勝

else

ans==0?puts("brother"):puts("john"); //其他情況,將所有資料異或起來 }

return 0;

}

HDU 1907 John (尼姆博弈新理解)

看了大神寫的尼姆博弈感覺自己之前學的都沒啥用。大神完完全全的把尼姆博弈所有情況用五個狀態表示出來,中對於s2,t2的定義的前半句是對的,後半句不對不用理會,而且為了保證s必勝t必敗,應該對調s0和t0的定義,但是大佬就是這麼定義的,凑活看吧。感覺簡直強,所以應用到這道題之中,不難分析搶奪到s1則先手...

hdu 1907 尼姆博弈

題意 sample input 2 3 3 5 1 1 1 sample output john brother 給你 t組案例,給你n堆 下面n堆每堆有多個a個 每次取1 a個,最後取完的輸掉 解 關於尼姆博弈,玄學 什麼時間一定輸 1,奇數個1 2,存在a 1 面對xor和為0 xor和為零代表...

hdu1907 尼姆博弈

尼姆博弈的性質。最後乙個取輸。若a1 a2 a3.a4 0表示利他態t,不然為利己態s。充裕堆 1個堆裡的個數大於2.t2表示充裕堆大於等於2,t1表示充裕堆大於等於1,t0表示無充裕堆。s2表示充裕堆大於等於2,s1表示充裕堆大於等於1,s0表示無充裕堆。必敗態 t2,s0 必勝態 s2,s1,t...