Pagini recente » Cod sursa (job #1797678) | Cod sursa (job #1864493) | Cod sursa (job #2935498) | Cod sursa (job #266597) | Cod sursa (job #2928973)
#include <iostream>
#include <fstream>
#include <vector>
#include <cassert>
using namespace std;
ifstream fin("bowling.in");
ofstream fout("bowling.out");
const int NMAX = 5000;
int sg[NMAX + 1];
bool f[NMAX + 2];
int MEX(vector <int> v){
for(int i = 0; i <= NMAX + 1; i++)
f[i] = 0;
int maxi = 0;
for(auto x : v){
assert(x <= NMAX);
f[x] = true;
maxi = max(maxi, x);
}
for(int val = 0; val <= maxi + 1; val++)
if(!f[val])
return val;
}
// x <- (i, x - i - 1) ^ (i, x - i - 2)
void spragueGrundy(){
sg[0] = 0;
for(int i = 1; i <= NMAX; i++){
vector <int> v;
for(int j = 0; j <= i - 1; j++)
v.push_back(sg[j] ^ sg[i - j - 1]);
for(int j = 0; j <= i - 2; j++)
v.push_back(sg[j] ^ sg[i - j - 2]);
sg[i] = MEX(v);
}
}
string players[] = {"Fumeanu", "Nargy"};
void solve(){
int n;
fin >> n;
int len = 0, xorSum = 0;
for(int i = 1; i <= n; i++){
int x;
fin >> x;
if(x == 1)
len++;
else
xorSum ^= len, len = 0;
}
xorSum ^= len;
fout << players[(xorSum != 0)] << '\n';
}
int main(){
spragueGrundy();
int T;
fin >> T;
while(T--)
solve();
return 0;
}