博弈問題除了有趣之外,我也想不到有什麼可以形容了,知識有用之餘,又可以騙下那些無知的小朋友(奸笑ing…………)
這個又是經典的說,叫做巴什博弈,英文叫Bash Game。嗯嗯,大概又是一個叫Bash的人想到的
所謂的Bash Game就是說:在只有一堆n個的物品,兩人輪流從中取物品,每次至少取一個,至多取m個,最後是誰取光物品誰就是勝利者。
先假設,n = m+1.很明顯無論當前玩家從中取多少物品,都無法否認他將要輸的命運,這是一個必敗點。我們的目的總是為了導致必敗點,
假設 m+1 < n < 2(m+1),那麼當前玩家只要從中取(n-(m+1))就可以導致必敗點(m+1);又假設2(m+1) < n < 3(m+1),當前玩家只要從堆中取出
(n-2(m+1))的物品,堆中剩下2(m+1)的物品,無論對手接下來取多少物品(1 <= x <= m),剩下的物品數s,m+1 < s < 2(m+1),我們又可以取走相應數
量的物品使堆中剩下m+1 個物品,所以2(m+1)也是一個必敗點;如此類推堆中物品數 S = k(m+1)(k = 1,2,3……)為必敗點。
最後得出在這個遊戲中:
1.如果m >= n,先手者必勝
2.如果n = k(m+1)+x (k = 1,2,3……;x <= m),先手者勝
3.如果n = k(m+1),後手者勝
然後…………………………你懂的
#include<iostream>using namespace std;int main(){int cCase;cin >>cCase;while(cCase--){int n,m;bool flag = true;cin >>n >>m;if(m >= n)flag = true;else if(n%(m+1))flag = true;elseflag = false;if(flag)cout <<"first" <<endl;elsecout <<"second" <<endl;}return 0;}