HDU 1848 Fibonacci again and again(SG函数)

题目链接

模版题,写错了,wa好几次。。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 using namespace std;
 5 #define LL __int64
 6 int dp[1001];
 7 int fib[21];
 8 int sg(int x)
 9 {
10     int flag[101],temp,i;
11     if(dp[x] >= 0)
12     return dp[x];
13     memset(flag,0,sizeof(flag));
14     for(i = 1;i <= 15&&x >= fib[i];i ++)
15     {
16         if(dp[x-fib[i]] == -1)
17         temp = sg(x-fib[i]);
18         else
19         temp = dp[x-fib[i]];
20         flag[temp] = 1;
21     }
22     for(i = 0;;i ++)
23     if(!flag[i])
24     return dp[x] = i;
25 }
26 int main()
27 {
28     int n,m,p,ans,i;
29     fib[1] = 1;
30     fib[2] = 2;
31     for(i = 3;i <= 15;i ++)
32     {
33         fib[i] = fib[i-1] + fib[i-2];
34     }
35     while(scanf("%d%d%d",&n,&m,&p)!=EOF)
36     {
37         if(!n&&!m&&!p) break;
38         memset(dp,-1,sizeof(dp));
39         dp[0] = 0;
40         ans = 0;
41         ans ^= sg(n);
42         ans ^= sg(m);
43         ans ^= sg(p);
44         if(ans)
45         printf("Fibo\n");
46         else
47         printf("Nacci\n");
48     }
49     return 0;
50 }

 

posted @ 2013-05-29 15:20  Naix_x  阅读(172)  评论(0编辑  收藏  举报