题解——HDU 1848 Fibonacci again and again

一道组合游戏的题目

SG函数的板子题

预处理出SG函数的值然后回答询问即可

代码

#include <cstdio>
#include <algorithm>
#include <cstring>
#define int long long
using namespace std;
int f[20],vis[2000],SG[2000],m,n,p;
int init(int n){
  f[0]=1;
  f[1]=1;
  for(int i=2;i<=n;i++)
    f[i]=f[i-1]+f[i-2];
}
int getSG(int n){
  SG[0]=0;
  for(int i=1;i<=n;i++){
    memset(vis,0,sizeof(vis));
    for(int j=0;j<=20&&f[j]<=i;j++){
      vis[SG[i-f[j]]]=1;
    }
    for(int j=0;;j++)
      if(!vis[j]){
        SG[i]=j;
        break;
      }
  }
}
signed main(){
  init(20);
  getSG(1000);
  scanf("%d %d %d",&m,&n,&p);
  while(m!=0||n!=0||p!=0){
    if(SG[m]^SG[n]^SG[p])
      printf("Fibo\n");
    else
      printf("Nacci\n");
    scanf("%d %d %d",&m,&n,&p);
  }
  return 0;
}

猜你喜欢

转载自www.cnblogs.com/dreagonm/p/9570374.html