Cod sursa(job #1689888)

Utilizator emanuel_rRamneantu Emanuel emanuel_r Data 14 aprilie 2016 17:01:06
Problema Bowling Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include<iostream>
#include<fstream>
#include<vector>
#include<cstdlib>
#include<queue>
#include<cmath>
#include<algorithm>
#include<iomanip>

using namespace std;

ifstream f("bowling.in");
ofstream g("bowling.out");

int M[50005], A[50005], car[50005];
int n = 2500, t;

void Read()
{
    f>>n;
    for(int i=1; i<=n; i++)
        f>>A[i];
}

void Precalc()
{
    int i, j, xorsum;

    M[1] = 1;
    M[2] = 2;
    for(i=2; i<=n; i++){
        for(j=0; j<=i/2; j++){
            xorsum = M[j] ^ M[i-j-1];
            car[xorsum] = 1;
            xorsum = M[j] ^ M[i-j-2];
            car[xorsum] = 1;
        }

        for(j=0; j<=i && car[j]; j++);
        M[i] = j;

        for(j=0; j<=i; j++)
            car[j] = 0;
    }
}

void Solve()
{
    int i, xorsum = 0, secv = 0;

    for(i=1; i<=n; i++){
        if(A[i])
            secv++;
        if(!A[i]){
            xorsum ^= M[secv];
            secv = 0;
        }
    }
    if(A[n])
        xorsum ^= M[secv];

    if(xorsum)
        g<<"Nargy\n";
    else
        g<<"Fumeanu\n";
}

int main()
{
    f>>t;
    Precalc();
    while(t--){
        Read();
        Solve();
    }
    return 0;
}