http://acm.hdu.edu.cn/showproblem.php?pid=1848
组合博弈 sg值
我的代码
1 #include <stdio.h>
2 #include <string.h>
3 int main()
4 {
5 const int N=1001,M=17;
6 const char name[2][10]={"Nacci","Fibo"};
7 int f[M]={1,1};
8 for (int i=2;i<M;i++) f[i]=f[i-1]+f[i-2];
9 int a[N]={0},vis[N],i,j,n,m,p;
10 for (i=0;i<N;i++)
11 {
12 memset(vis,0,sizeof(vis));
13 for (j=1;i-f[j]>=0;j++) vis[a[i-f[j]]]=1;
14 j=0; while (vis[j]) j++;
15 a[i]=j;
16 }
17 while (scanf("%d%d%d",&m,&n,&p),m||n||p)
18 printf("%s\n",name[(a[m]^a[n]^a[p])>0]);
19 }


浙公网安备 33010602011771号