地址:
点击打开链接
SG打表模板题
代码:
#include<iostream> #include<cstdio> #include<string.h> #include<stack> #include<queue> #include<queue> using namespace std ; #define MAX 1001 int f[MAX]; int sg[MAX]; int Hash[MAX]; void getSG(int n ) { int i ,j ; memset(sg,0,sizeof(sg)); for(i = 1 ; i <=MAX ; i++) { memset(Hash,0,sizeof(Hash)); for(j = 1 ; f[j]<=i;j++) { Hash[sg[i-f[j]]]=1; } for(j = 0 ; j<=n ; j ++) { if(Hash[j]==0) { sg[i]=j; break ; } } } } int main() { int i ,m, n , p ; f[0]=f[1]=1; for(i=2 ; i <100 ; i++) { f[i]=f[i-1]+f[i-2]; if(f[i]>1000) break ; } getSG(MAX); while(scanf("%d%d%d",&m,&n,&p)!=EOF) { if(m==0&&n==0&&p==0) break; if((sg[m]^sg[n]^sg[p])==0) { printf("Nacci\n"); }else { printf("Fibo\n"); } } }