巴什博弈
- 只有一堆 n 個物品,兩個人輪流從這堆物品中取物,規定每次至少取一個,最多取 m個。最後取光者得勝。
必敗態分析:
1.如果,那麼先手每次取中的一個數字,後手都可以取,使得剩餘的物品數量仍然滿足,直至當的狀態下,輪到先手取數,後手必能取完最後的物品,因而獲勝
2.如果,那麼先手可以先取走個物品,就又回到了第一種情況,先手獲勝
綜上所述:保持給對手留下的倍數,就能獲勝
例題: HDU 1846
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<bitset>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<queue>
#include<map>
#define ll long long
#define pb push_back
#define rep(x,a,b) for (int x=a;x<=b;x++)
#define repp(x,a,b) for (int x=a;x<b;x++)
#define W(x) printf("%d\n",x)
#define WW(x) printf("%lld\n",x)
#define pi 3.1415926535897932384
#define mem(a,x) memset(a,x,sizeof a)
#define lson rt<<1,l,mid
#define rson rt<<1|1,mid+1,r
using namespace std;
const int maxn=2e6+7;
const int INF=1e9;
const ll INFF=1e18;
int main()
{
int t;
cin>>t;
while(t--)
{
int n,m;
cin>>n>>m;
if (n%(m+1)==0)cout<<"second"<<endl;
else cout<<"first"<<endl;
}
return 0;
}