巴什博奕(Bash Game):只有一堆n個物品,兩個人輪流從這堆物品中取物,規定每次至少取一個,最多取m個。最後取光者得勝。
顯然,如果n=m+1,那麼由於一次最多隻能取m個,所以,無論先取者拿走多少個,後取者都能夠一次拿走剩餘的物品,後者取勝。因此我們發現瞭如何取勝的法則:如果n=(m+1)r+s,(r爲任意自然數,s≤m),那麼先取者要拿走s個物品,如果後取者拿走k(≤m)個,那麼先取者再拿走m+1-k個,結果剩下(m+1)(r-1)個,以後保持這樣的取法,那麼先取者肯定獲勝。總之,要保持給對手留下(m+1)的倍數,就能最後獲勝。
#include<iostream> using namespace std; int main() { int c,n,m; scanf("%d",&c); while(c--) { scanf("%d%d",&n,&m); if(n<=m||n%(m+1)!=0) { printf("first\n"); continue; } printf("second\n"); } return 0; }
http://www.cnblogs.com/XBWer/archive/2012/08/21/2649926.html