博弈論 P4101 人人盡說江南好

2021-10-20 00:15:23 字數 1913 閱讀 9116

博弈論還不是那麼明白的小夥伴請先閱讀這篇文章

luogu:p4101 [heoi2014]人人盡說江南好

遊戲的規則是這樣的,給定 n 堆石子,每堆石子一開始只有 1 個。小 z 和他的小夥伴輪流操作, 小 z 先行操作。操作可以將任意兩堆石子合併成為一堆,當誰不再能操作的時候,誰就輸掉了。

不過,當一堆石子堆的太高時可能發生危險,因此小 z 和他的小夥伴規定,任何時刻任意一 堆石子的數量不能超過 m。即假如現在有兩堆石子分別有 a 個和 b 個,而且 a+b>m,那麼這 兩堆石子就不能合成一堆。

小 z 和他的小夥伴都是很聰明的,所以他們總是會選擇對自己最有利的策略。現在小 z 想要知道,在這種情況下,對於乙個給定的 n 和 m,到底是誰能夠獲得勝利呢?

先手和後手要依次合併石子,所以每次堆數都會減少1。

當 n

<=m

n<=m

n<=m

時,顯然,n

nn個石子是可以被放在一堆裡面的,所以合併次數ans

=n−1

;ans=n-1;

ans=n−

1;當 n

>

mn>m

n>

m 時,將n

nn個石子合併後的結果會是這個樣子

\\ 所以合併次數ans

=(n/

m)∗(

m−1)

+((n

%m)?

(n%m

−1):

0)ans=(n/m)*(m-1)+(\ (n\%m)\ ?\ (\ n\%m-1):0\ )

ans=(n

/m)∗

(m−1

)+((

n%m)

?(n%

m−1)

:0)

說完合併次數的問題,我們來聊一聊最優策略的問題。

本題中當ans

ansan

s為奇數時,先手獲勝,反之,後手獲勝。

當n ≤ m時,這種情況最後肯定能合成一堆,我們稱這個較大的堆為大堆。假如現在輪到先手操作,先手還沒動,這個時候最長合併次數為偶數次,那麼先手有兩種可能性,把後面乙個堆丟進大堆裡面,這樣後手再丟乙個小堆進去,或者把後面兩個堆合成乙個,那麼後手就可以把這個合成的直接丟進去。無論怎麼做,後手都能保證每輪完了之後,大堆的石子會增加兩個,那麼合併次數也會-2,一直保持為偶數。直到最後先手合無可合。

具體**如下:(非常的簡潔)

#include

#include

#include

#include

#include

#define rg register

typedef

long

long ll;

inline

intsread()

while

(c>=

'0'&&c<=

'9')

return f*x;

}ll n,m,t,ans;

intmain()

if(ans%2)

printf

("0\n");

else

printf

("1\n");

}return0;

}

要尋找到最優的策略,是這類題的突破口。本題中合併次數就是最優策略的發現點。要善於發現題目中的博弈方式和最優策略。

BZOJ3609 人人盡說江南好(博弈論)

bzoj 洛谷昨天考試的時候,毒瘤出題人出了乙個no ipn oi p博弈十合一然後他就被阿魯巴了,因為畫面殘忍,就不再展開。這題是他的十合一中的第四問,然而我並不會做,所以自己就大力yy了一下,首先一定有 n m n m 個大小為 m m 的堆,那麼還剩下n m role presentation...

P4101 HEOI2014 人人盡說江南好

小 z 是乙個不折不扣的 zrp zealot round game player,回合制遊戲狂熱玩家 最近他 想起了小時候在江南玩過的乙個遊戲。在過去,人們是要邊玩遊戲邊填詞的,比如這首 菩薩蠻 就是當年韋莊在玩遊戲時填 的 人 人 盡 說 江 南 好,遊 人 只 合 江 南 老。然而我們今天不太...

人人盡說江南好 題解 博弈論

傳送門 heoi2014 人人盡說江南好 先放詞 菩薩蠻 韋莊 人人盡說江南好,遊子只合江南老,青水碧於天,畫船聽雨眠。壚邊人似月,皓腕凝霜雪,未老莫還鄉,還鄉須斷腸。題目分析 第一眼看上去,貌似很難 但是如果再仔細看一下,就會發現 還是很難 不過只要你認真思考這個題,你就會發現 已經過去半個小時了...