1. 程式人生 > >hdu 1846 Brave Game

hdu 1846 Brave Game

博弈論的一道入門題

當n < m的時候一定是第一個人贏;

當n > m的時候我們可以進行分解為n = (m + 1) * r + s;

當s == 0;那麼一定是第二個人贏,因為無論第一個人如何拿,第二個人總是會給對方留下(m + 1)的倍數;最終一定是第二個人獲勝;

所以可以推出誰拿的時候是 (m + 1)的倍數,那麼他就會輸掉;

程式碼如下

#include <bits/stdc++.h>

typedef long long ll;

using namespace std;

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);

    ll t;
    cin >> t;
    while(t--)
    {
        ll x,y;
        cin >> x >> y;
        if(x <= y)
        {
            cout << "first" << endl;
            continue;
        }
        if(x % (y + 1) == 0)
        {
            cout << "second" << endl;
        }
        else
        {
            cout << "first" << endl;
        }
    }
    return 0;
}