http://acm.hdu.edu.cn/showproblem.php?pid=1848
#include<cstdio> #include<cstring> int sg[10001],a[15]; int mex(int n) { bool vis[16]={0}; for(int i=0;i<15;i++) { int t=n-a[i]; if(t<0) break; if(sg[t]==-1) sg[t]=mex(t); vis[sg[t]]=1; } for(int i=0;;i++) if(!vis[i]) return i; } int main() { a[0]=1;a[1]=1;a[2]=2; for(int i=3;i<15;i++) a[i]=a[i-1]+a[i-2]; int m,n,p,ans; while(scanf("%d%d%d",&m,&n,&p)!=EOF&&(n||m||p)) { memset(sg,-1,sizeof(sg)); int ans=mex(m)^ mex(n)^ mex(p); if(ans==0) printf("Nacci "); else printf("Fibo "); } return 0; }