关闭

hdu1848

382人阅读 评论(0) 收藏 举报
分类:
sg函数
#include <iostream>
#include <string.h>

using namespace std;

#define MAXN 1000 + 10

int f[MAXN];
int sg[MAXN];
bool vis[MAXN];

void getsg()
{
    sg[0] = 0;

    for (int i = 1; i <= 1000; i++)
    {
        memset(vis, false, sizeof(vis));

        for (int j = 1; f[j] <= i; j++)
        {
            vis[sg[i - f[j]]] = true;
        }

        for (int j = 0; j <= 1000; j++)
        {
            if (!vis[j])
            {
                sg[i] = j;
                break;
            }
        }
    }
}

void input()
{
    int n, m, p;

    f[0] = 1;
    f[1] = 1;

    for (int i = 2; i <= 16; i++)
    {
        f[i] = f[i - 1] + f[i - 2];
    }

    getsg();

    while (cin >> n >> m >> p, n + m + p)
    {
        cout << (sg[n] ^ sg[m] ^ sg[p] ? "Fibo" : "Nacci") << endl;
    }
}

int main()
{
    input();
    return 0;
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:105892次
    • 积分:3105
    • 等级:
    • 排名:第11731名
    • 原创:213篇
    • 转载:13篇
    • 译文:0篇
    • 评论:2条
    最新评论