天天写算法之(SG打表)Fibonacci again and again

地址: 点击打开链接
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");
        }

    }

}

猜你喜欢

转载自blog.csdn.net/qq_36616268/article/details/80175702