超級傳送門:
題目大意:
kiki和zz玩遊戲,在n*m的矩陣裡面,每次都是從[1,m]點出發,每次移動可以走到左,下,左下三個位置,輪到他不能移動的人算輸,每一次都是kiki先移動,給出n和m的大小,問kiki是輸還是贏。
p/n分析的用法:
p點:前乙個選手
(previous player)
將取勝的位置稱為必敗點。
n
點:後乙個選手
(nextplayer)
將取勝的位置稱為必勝點。
他們的關係是:
任何n點都至少有一種方法可以進入p點
無論怎樣操作,都只能去到n點
的點是p點
也就是說,做這樣的題目,先把邊界點(或結束點)算出他是p點還是n點,然後推回去算出原點是什麼點。
這題明顯最後[n,0]點是p點,然後把下邊和左邊的點的屬性先算出來,就可以算出整個棋盤的每個點的屬性。
想法不錯,但是題目資料時n,m<=2000,開始試圖開了2000*2000的陣列,超了空間- -||
後來在紙上畫了一下
p n p n p n p
n n n n n n n
p n p n p n p
n n n n n n n
p n p n p n p
n n n n n n n
p n p n p n p
很明顯:
當n和m為奇數的時候就是p點。
所以**就很好寫了:
ps:
以後要注意的一點是,這樣的博弈題可以先不急著做,在紙上先畫出一些,沒準就能找到規律,變得好簡單。
#includeusing namespace std;
int main()
if( (n & 1 == 1)&& (m & 1 == 1))
else
}return 0;
}
hdu 2147 kiki s game 簡單博弈
include include include include include include include include using namespace std int main return 0 f n m 1表示必勝,f n m 0表示必敗。博弈規則 乙個狀態是必敗,當且僅當所有後繼都是必...
HDU 2147 簡單巴什博弈
題目意思大概是說,有乙個n m的棋盤,玩家從右上角的格仔開始移動,只能向左 向下或者向左下移動,當然不能超出棋盤的範圍,直到有一方不能動為止,求是否先手必勝。這道題有了思路就很簡單,從左下角的格仔依次遞推p態和n態的範圍,就會發現如果行和列只要有乙個為偶數即為先手必勝,如下 pragma comme...
hdoj5563(簡單幾何)
笑死我了,居然一遍就過了。題意 給你5個點,讓你判斷能否組成乙個五角星 思路 利用對稱性,應該有很多種方法。弱打的很麻煩。但是那個兩點式公式去判斷另外乙個點是否在一條直線上的那個判斷,還是蠻喜歡的 double dd double xx i onex twox onex double yy i on...