HDU 2188 巴什博弈

2021-07-25 22:47:39 字數 1343 閱讀 5189

題解:剛開始沒思路,後來知道是巴士博弈,茅塞頓開。

參考部落格:

這道題是先到n誰就贏,林隊先投,問林隊能贏不,所以應該站在先手的角度看怎麼去贏。

比如n=m+1,不管先手怎麼投,後手肯定贏,所以先手要想贏,必須給後手造成他去投時n=m+1,所以當n=(m+1)r+s,先手取s,如果後手取k,先手再取m+1-k,始終給對方造成那種n=m+1的局面,所以先手肯定能贏。

**如下:

#includeusing namespace std;

int main()

}

那麼問題來了,如果誰先到n誰就輸呢。還是林隊先投,問林隊能贏不。

比如n=m+1+1,先手投k,後手投m+1-k,後手總能給先手留乙個,後手肯定贏了,所以當n=(m+1)+1時,後者穩贏。所以如果先手想贏,就必須給後手造成他去投時n=m+1+1,所以當n=(m+1)+s,s!=1,先手取s-1,就會給後手造成n=m+1+1的局面了。

歸納如下:

一:取光為勝時

①當 n = (m + 1) r, 先者取 k (k <= m),後者再取 m + 1 - k 個,保持先者取時是 m + 1 的倍數,則後者必勝 → n % (m + 1) == 0 則後者必勝。

②當 n = (m + 1) r + s,先者首先要取掉 s 個, 這樣留給後者(對手)的個數為 m + 1 的倍數,後者無論取多少,

先者只要保持取掉一定個數使得輪到後者的時候還剩 m + 1 的倍數個,這樣最後先者必勝 → n % (m + 1) != 0 則先者必勝。

結論:保持對手取的時候數量為 m + 1 的倍數則必勝。

二:取光為負時

①當 n = (m + 1) r + 1,先者取 k(k <= m),後者取掉一定數量使得輪到先者時數量為: (m + 1)的倍數 + 1

這樣最後一輪後者無論取掉多少,先者必定能取剩 1個- -,當然先者取光咯,所以後者必勝 → (n - 1) % (m + 1) == 0 則後者必勝。

②當 n = (m + 1) r + s,(s != 1),先者首先要取掉 s - 1 個,這樣留給後者(對手)數量為 (m + 1) r + 1 ,後者取 k (k <= m),

輪到先者的只會是 (m + 1) r 或者  (m + 1) (r - 1) + 2,這樣始終取掉一定數量使得留給後者(對手)的數量為: (m + 1)的倍數 + 1

這樣最後一輪時,先者肯定取剩 1 個- -,當然後者取光咯,所以先者必勝 → (n - 1) % (m + 1) != 0 則先者必勝。

③當 n = (m + 1) r,先者取 m - 1 個,則又變成②了。

結論:保持對手取的時候數量為 (m + 1)的倍數 + 1 則必勝。

hdu 2188 巴什博弈

problem description 對於四川同胞遭受的災難,全國人民紛紛伸出援助之手,幾乎每個省市都派出了大量的救援人員,這其中包括搶險救災的武警部隊,和防疫的醫護人員,以及進行心理疏導的心理學專家。根據要求,我校也有乙個奔赴災區救災的名額,由於廣大師生報名踴躍,學校不得不進行選拔來決定最後的人...

hdu 2188 巴什博弈入門

如果n m 1,那麼由於一次最多只能取m個,所以,無論先取者拿走多少個,後取者都能夠一次拿走剩餘 的物品,後者取勝。因此我們發現了如何取勝的法則 如果n m 1 r s,r為任意自然數,s m 那麼先 取者要拿走s個物品,如果後取者拿走k m 個,那麼 先取者再拿走m 1 k個,結果剩下 m 1 r...

HDU2188 巴什博奕

problem description 對於四川同胞遭受的災難,全國人民紛紛伸出援助之手,幾乎每個省市都派出了大量的救援人員,這其中包括搶險救災的武警部隊,和防疫的醫護人員,以及進行心理疏導的心理學專家。根據要求,我校也有乙個奔赴災區救災的名額,由於廣大師生報名踴躍,學校不得不進行選拔來決定最後的人...