HDU

来源:互联网 发布:万达告别房地产 知乎 编辑:程序博客网 时间:2024/06/07 03:41

组合游戏

答案是每个游戏的 SG函数的异或和

对于 SG函数(定理) 这里有详解:http://blog.csdn.net/luomingjun12315/article/details/45555495


#include<iostream>#include<algorithm>#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<cmath>#include<set>#include<queue>#include<stack>#include<map>using namespace std;typedef long long ll;const int maxn = 1e4 + 7, INF = 0x7f7f7f7f, mod = 1e9 + 7;int n, m, p;int f[maxn] = {1, 1}, sg[maxn] = {0};set<int> st;void init() {    for(int i = 1; i <= 1000; ++i) {        st.clear();        for(int j = 1; f[j] <= i; ++j) {            st.insert(sg[i-f[j]]);        }        for(int j = 0; j <= i; ++j) {            if(st.count(j) == 0) { sg[i] = j; break; }        }        //cout << sg[i] << " ";    }}int main() {    for(int i = 2; f[i-1] < 4000; ++i)        f[i] = f[i-1] + f[i-2];        init();    while(~scanf("%d %d %d", &n, &m, &p) && n+m+p) {        if(sg[n]^sg[m]^sg[p]) puts("Fibo");        else puts("Nacci");    }    return 0;}


原创粉丝点击