现在换是看不明白SG函数的求法什么的
暂时先当模板题吧
函数mex1就是求g(x)
然后异或
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> 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++){ t=p-fibo[i]; if(t<0) break; if(f[t]==-1) f[t]=mex1(t); g[f[t]]=1; } for(i=0;;i++){ if(!g[i]) return i; } } int main() { int m,n,p,s; fibo[0]=1; fibo[1]=2; for(int i=2;i<=18;i++) fibo[i]=fibo[i-1]+fibo[i-2]; k=19; 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) printf("Nacci\n"); else printf("Fibo\n"); } return 0; }
时间: 2024-08-07 21:17:27