http://acm.hdu.edu.cn/showproblem.php?pid=1848
题意:同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和就行了= =而且是暴力哦~