Cod sursa(job #2394888)

Utilizator Alex_BubBuburuzan Alexandru Alex_Bub Data 2 aprilie 2019 08:26:31
Problema Bowling Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
#include <vector>
#include <cstring>

using namespace std;

ifstream fin("bowling.in");
ofstream fout("bowling.out");

const int NMax = 1000;

int Mex[NMax + 5], N, L, Ans, T;

bool A[2 * NMax + 5];

vector <int> V;

int FindMex(int K)
{
    for(int i = 1; i < K; i++)
        V.push_back(Mex[i] ^ Mex[K - i - 1]);

    for(int i = 1; i < K - 1; i++)
        V.push_back(Mex[i] ^ Mex[K - i - 2]);

    memset(A, 0, sizeof(A));

    while(V.size()) A[V.back()] = 1, V.pop_back();

    for(int i = 0; i <= 2 * NMax + 3; i++)
        if(A[i] == 0)
            return i;
}

void Precalc()
{
    for(int i = 1; i <= NMax; i++)
        Mex[i] = FindMex(i);
}

int main()
{
    fin >> T; Precalc();

    while(T--)
    {
        fin >> N; L = Ans = 0;

        for(int i = 1, x; i <= N; i++)
            fin >> x, ((x == 1) ? (L++) : (Ans ^= Mex[L], L = 0));

        Ans ^= Mex[L];

        fout << ((Ans) ? "Nargy" : "Fumeanu") << '\n';
    }
    fin.close();
    fout.close();

    return 0;
}