#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
int k,fibo[100],f[10001];
int mex1(int p)
{
int i,t;
bool g[101]= {0};
for(i=0; i<k; i++) //注意 i从0开始,别动i
{
t=p-fibo[i];
if(t<0)
break;
if (f[t]==-1)
f[t]=mex1(t);
g[f[t]]=1;
}
for(i=0;; i++) //好像必须从0开始啊
{
if (!g[i])
return i;
}
}
int main()
{
int m,n,p,s;
fibo[0]=1; //也从0开始 ,别动
fibo[1]=2;
for(int i=2; i<=18; i++) //为啥就到18呢,因为fibo[18]就大于1000了,本题范围是1000
fibo[i]=fibo[i-1]+fibo[i-2];
k=19;//取数规则的个数 fibo[]的个数
sort(fibo,fibo+k); //排序 本题这句可以不用,因为fibo已经排好序了,带着好,免得错!
memset(f,-1,sizeof(f));
f[0]=0;
for(int i=1; i<=1000; i++)
f[i]=mex1(i);
while(scanf("%d%d%d",&m,&n,&p))
{
if(m==0&&n==0&&p==0) break;
s=0;
s=s^f[m]^f[n]^f[p];
if (s==0)
puts("Nacci");
else
puts("Fibo");
}
return 0;
}
SG函数(HDU1848)
最新推荐文章于 2020-05-03 19:53:38 发布