NYOJ-23 取石子(巴什博弈)

一天,TT在寢室閒着無聊,和同寢的人玩起了取石子游戲,而由於條件有限,他/她們是用旺仔小饅頭當作石子。遊戲的規則是這樣的。設有一堆石子,數量爲N(1<=N<=1000000),兩個人輪番取出其中的若干個,每次最多取M個(1<=M<=1000000),最先把石子取完者勝利。我們知道,TT和他/她的室友都十分的聰明,那麼如果是TT先取,他/她會取得遊戲的勝利麼?
題目鏈接:http://acm.nyist.net/JudgeOnline/problem.php?pid=23
感謝評論區的分析,以前雖然知道有規律確實沒仔細思考過

看完下面這個分析,寫成代碼就簡單了吧~
如果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 i,n,m;
    cin>>i;
    while(i--)
    {
        cin>>n>>m;
        if(n%(m+1)==0)
            cout<<"Lose"<<endl;
        else cout<<"Win"<<endl;
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章