zoukankan      html  css  js  c++  java
  • hdu 1848 Fibonacci again and again 组合游戏 SG函数

    题目链接

    题意

    三堆石子,分别为(m,n,p)个,两人依次取石子,每次只能在一堆当中取,并且取的个数只能是斐波那契数。最后没石子可取的人为负。问先手会赢还是会输?

    思路

    直接按定义计算(SG)函数。

    Code

    #include <bits/stdc++.h>
    #define maxn 1000
    using namespace std;
    typedef long long LL;
    int f[maxn+10], sg[maxn+10];
    bool vis[maxn+10];
    void init() {
        f[0] = f[1] = 1;
        int i = 2;
        for (; i <= maxn && f[i-1] < maxn ; ++i) f[i] = f[i-1] + f[i-2];
        int tot = i-1;
        sg[0] = 0;
        for (int i = 1; i <= maxn; ++i) {
            memset(vis, 0, sizeof(vis));
            for (int j = 0; j < tot && i >= f[j]; ++j) vis[sg[i-f[j]]] = true;
            for (int j = 0; j <= maxn; ++j) { if (!vis[j]) {sg[i] = j; break; } }
        }
    }
    int n, m, p;
    void work() {
        if (sg[n]^sg[m]^sg[p]) puts("Fibo");
        else puts("Nacci");
    }
    int main() {
        init();
        while (scanf("%d%d%d", &n, &m, &p) != EOF && n&&m&&p) work();
        return 0;
    }
    
    
  • 相关阅读:
    regex
    ubuntu 14.04 更新 gcc/g++ 4.9.2
    然而我又更新博客了。
    我一万年也不更新一次博客
    区块链
    mongodb查看数据库和表的信息
    js高级总结
    es6 新特性
    Flex 布局教程:实例篇
    常用 Git 命令清单
  • 原文地址:https://www.cnblogs.com/kkkkahlua/p/7684954.html
Copyright © 2011-2022 走看看