题解——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; }