文章不错,大家可以看看。
搞了半天原来SG函数这么简单,类比为Nim真是碉炸啦!
不太会写,将原理拿过来直接敲了。
#include<iostream> #include<algorithm> using namespace std; bool cmp( int a,int b ){ return a<b; } int mex( int rec[],int cnt ) { sort( rec,rec+cnt,cmp ); if( rec[0] ) return 0; for( int i=1;i<cnt;i++ ) { if( rec[i]==rec[i-1] ) continue; if( rec[i]!=rec[i-1]+1 ) return rec[i-1]+1; } return rec[cnt-1]+1; } int main() { int n,m,p; int sg[1111],f[1111]; f[1]=f[2]=1; for( int i=3;;i++ ) { f[i]=f[i-1]+f[i-2]; if( f[i]>1111 ) break; } memset( sg,0,sizeof(sg) ); int rec[1111];int cnt=0; for( int i=1;i<=1000;i++ ) { cnt=0; for( int k=1;i-f[k]>=0;k++ ) { rec[cnt++]=sg[i-f[k]]; } sg[i]=mex( rec,cnt ); } while( scanf("%d %d %d",&n,&m,&p)!=EOF ) { if( n+m+p==0 ) break; if( sg[n]^sg[m]^sg[p] ) printf( "Fibo\n" ); else printf( "Nacci\n" ); } return 0; }