Description

ICG 游戏,每次可以取走 \(i \in [1,k]\) 颗石子,取最后一颗者胜。判断是否存在必胜策略。

Solution

局面可以用石子数 \(n\) 描述,则局面的 SG 函数为 \(SG(n)=\textrm{Mex}_{i=1}^{\min(k,n)} SG(n-i)\)

显然 \(SG(0)=0,SG(1)=1,...,SG(k)=k,SG(k+1)=0,SG(k+2)=1,...,SG(2k+2)=0,...\)

于是先手必胜当且仅当 \((k+1) \ |\not \ n\)

#include <bits/stdc++.h>
using namespace std;

#define int long long
const int N = 1000005;

signed main()
{
    int n,k;
    cin>>n>>k;
    if(n%(k+1))
    {
        cout<<1;
    }
    else
    {
        cout<<2;
    }
}

相关文章: