sg博弈结论为,下个状态sg的补集的最小值。
题目
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+9;
bool book[15];
int sg[maxn];
int main()
{
int t,a,b;
scanf("%d%d%d",&t,&a,&b);
a++;
b++;
memset(sg,0,sizeof(sg));
for(int i=1;i<=t;i++)
{
memset(book,0,sizeof(book));
book[sg[i-1]]=1;
for(int j=a;j<=b;j++)
{
int k=i-j;
if(k<0) break;
else
{
book[sg[k]]=1;
}
}
for(int j=0;j<=20;j++)
{
if(!book[j])
{
sg[i]=j;
break;
}
}
}
printf("%s\n",sg[t]!=0?"Alice":"Bob");
return 0;
}