传送门
预处理一下 Fibonacci 数列
然后预处理 SG 函数即可
不同的独立子游戏用异或求得组合结果
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e3+5;
int fib[maxn];
int sg[maxn];
int k;
int used[maxn];
void getsg() {
sg[0] = 0;
for (int i = 1; i < maxn; ++i) {
for (int j = 1; fib[j] <= i; ++j) {
used[sg[i-fib[j]]] = i;
}
for (int t = 0; ;++t) {
if (used[t] != i) {
sg[i] = t;
break;
}
}
}
}
int main() {
fib[1] = 1;
fib[2] = 2;
k = 2;
while (true) {
k++;
fib[k] = fib[k-1]+fib[k-2];
if (fib[k] > 1000) {
break;
}
}
getsg();
int n, m, p;
while (cin >> n >> m >> p && n && m && p) {
if (sg[n]^sg[m]^sg[p])
cout << "Fibo" << endl;
else
cout << "Nacci" << endl;
}
return 0;
}