對博弈論還不是那麼明白的小夥伴請先閱讀這篇文章
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 人人盡說江南好 先放詞 菩薩蠻 韋莊 人人盡說江南好,遊子只合江南老,青水碧於天,畫船聽雨眠。壚邊人似月,皓腕凝霜雪,未老莫還鄉,還鄉須斷腸。題目分析 第一眼看上去,貌似很難 但是如果再仔細看一下,就會發現 還是很難 不過只要你認真思考這個題,你就會發現 已經過去半個小時了...