題解:剛開始沒思路,後來知道是巴士博弈,茅塞頓開。
參考部落格:
這道題是先到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 對於四川同胞遭受的災難,全國人民紛紛伸出援助之手,幾乎每個省市都派出了大量的救援人員,這其中包括搶險救災的武警部隊,和防疫的醫護人員,以及進行心理疏導的心理學專家。根據要求,我校也有乙個奔赴災區救災的名額,由於廣大師生報名踴躍,學校不得不進行選拔來決定最後的人...