文章不错,大家可以看看。
搞了半天原来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" );elseprintf( "Nacci\n" );}return 0;
}