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 }

 

你可能感兴趣的:(fibonacci)