题意:同nim,3堆,每次取的为fib数,n<=1000

#include <cstdio>
#include <cstring>
using namespace std;
int f[1005], a[100];
bool b[20];
int main() {
	a[1]=1; a[2]=2;
	for(int i=3; i<=15; ++i) a[i]=a[i-1]+a[i-2];
	f[0]=0;
	for(int i=1; i<=1000; ++i) {
		memset(b, 0, sizeof b);
		for(int j=1; j<=15; ++j) if(i>=a[j]) b[f[i-a[j]]]=1;
		for(int j=0; j<=16; ++j) if(!b[j]) { f[i]=j; break; }
	}
	int x, y, z;
	while(scanf("%d%d%d", &x, &y, &z), x|y|z) f[x]^f[y]^f[z]?puts("Fibo"):puts("Nacci");
	return 0;
}

  


 

好无聊= =

求出sg然后求sg和就行了= =而且是暴力哦~

 本文为博主原创文章,未经博主允许不得转载。一经发现,必将追究法律责任。