题目链接: UVA12293

题意:https://cn.vjudge.net/problem/UVA-12293#author=2017wph

对于那一个少球的盒子其实不用太多去考虑,只需要控制最多球的那个盒子,对于这个多球的,只要把它的数量控制在尽量多就行了,也就是(n+1)/2 到n-1个,然后SG函数找找规律就行了

规律是2^i-1

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=1010;
bool vis[maxn];
int SG[maxn];
/*
void getSG(int x)
{
	for(int i=1;i<=x;i++)
	{
		memset(vis,false,sizeof(vis));
		for(int j=(i+1)/2;j<i;j++)
		{
			vis[SG[j]]=true;
		}
		for(int j=0;;j++)
		{
			if(!vis[j])
			{
				SG[i]=j;
				break;
			}
		}
	}
	return;
}
*/
int main()
{
	/*
	getSG(1000);
	for(int i=1;i<=50;i++)
	{
		printf("%3d",SG[i]);
		if(i%5==0) puts("");
	}
	*/
    //freopen("in.txt","r",stdin);
	int n;
	while(~scanf("%d",&n))
	{
        if(n==0) break;
        bool flag=false;
        for(int i=1;i<32;i++)
        {
            if(n==(1<<i)-1)
            {
                flag=true;
                break;
            }
        }
        if(flag) puts("Bob");
        else puts("Alice");
	}
	return 0;
}

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐