南陽 oJ 585 尼姆博弈

2021-06-23 02:43:05 字數 1224 閱讀 2639

時間限制:1000 ms  |  記憶體限制:65535 kb

難度:3

描述最近

topcoder

的piaoyi

和hrdv

很無聊,於是就想了乙個遊戲,遊戲是這樣的:有

n堆石子

,兩個人輪流從其中某一堆中任意取走一定的石子

,最後不能取的為輸家,注意:

每次只能從一堆取任意個,可以取完這堆,但不能不取。假設

piaoyi

先取石子,請你幫他判斷他是否能贏(假設他們取的過程中不發生失誤

,他們足夠聰明

)。輸入

第一行輸入n,代表有n組測試資料(n<=10000)

以下每組測試資料報含兩行:第一行:包含乙個整數m,代表本組測試資料有m(m<=1000)堆石子;

:第二行:包含m個整數ai(ai<=100),分別代表第i堆石子的數量。

輸出若piaoyi贏輸出「piaoyi」,否則輸出「hrdv」注意每組結果佔一行。。

樣例輸入32

1 13

3 8 11

25 10

樣例輸出

hrdv

hrdv

piaoyi

**

原創 上傳者

tc_張友誼

思路:典型的尼姆博弈,套用結論。對每堆的數量異或運算,最後結果為零的說明是先手失敗,否則,先手贏。

我的**如下:
#includeint main()

puts(sum?"piaoyi":"hrdv");

} return 0;

下面這是提交之後看到的最優**:
#include#includeusing namespace std;

void in(int &a)

int main()

if(ans) puts("piaoyi");

else puts("hrdv");

}return 0;

}

南陽 oj尼姆博弈

時間限制 3000 ms 記憶體限制 65535 kb 難度 5 描述 小王喜歡與同事玩一些小遊戲,今天他們選擇了玩取石子。遊戲規則如下 共有n堆石子,已知每堆中石子的數量,並且規定好每堆石子最多可以取的石子數 最少取1顆 兩個人輪流取子,每次只能選擇n堆石子中的一堆,取一定數量的石子 最少取乙個 ...

博弈 尼姆博弈

今天我們來聊一聊另一種博弈 尼姆博弈,這一種博弈可以說是巴什博弈的一種變體,巴什博弈中 石子 的堆數為1堆,而在利姆博弈中 石子 的堆數為n堆,還有在尼姆博弈中取石子的規則也發生了變化,前一種博弈中取石子的數量限定在 1,l 而後一種取石子的數量可以為任意數 但不能不取,而且還不能超過這一堆石子的總...

博弈論(尼姆博弈)

尼姆博弈指的是這樣乙個博弈遊戲 有任意堆物品,每堆物品的個數是任意的,雙方輪流從中取物品,每一次只能從一堆物品中取部分或全部物品,最少取一件,取到最後一件物品的人獲勝。結論就是 把每堆物品數全部異或起來,如果得到的值為0,那麼先手必敗,否則先手必勝。這樣理解 先手必敗態為面臨的所有堆都為0,而此時的...