裸的sg函数题目
代码如下:
const int M = 1005;
int f[M], sg[M];
void getSG()
{
sg[0] = 0;
for(int i = 1; i < M; ++i) {
bool vis[M];
memset(vis,0,sizeof(vis));
for(int j = 1; f[j] <= i; ++j)
vis[sg[i-f[j]]] = 1;
for(int j = 0; ; ++j)
if(!vis[j]) {
sg[i] = j;
break;
}
}
}
int main()
{
int n, m, q;
f[0] = f[1] = 1;
for(int i = 2; ; ++i) {
f[i] = f[i-1] + f[i-2];
if(f[i]>M) break;
}
getSG();
while(~scanf("%d%d%d", &n, &m, &q) && n+m+q) {
if(sg[m]^sg[n]^sg[q]) puts("Fibo");
else puts("Nacci");
}
return 0;
}