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;
    }
    
    
  • 相关阅读:
    项目选题报告答辩总结
    项目UML设计(团队)
    项目选题报告答辩总结
    第七次作业
    结对第二次
    第四次作业
    alpha冲刺4
    alpha冲刺3
    alpha冲刺2
    alpha冲刺1
  • 原文地址:https://www.cnblogs.com/kkkkahlua/p/7684954.html
Copyright © 2011-2022 走看看