Cod sursa(job #2019242)

Utilizator DenisONIcBanu Denis Andrei DenisONIc Data 7 septembrie 2017 12:56:03
Problema Bowling Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <fstream>
#include <iostream>
#define Nmax 50002
using namespace std;


int n,t,v[Nmax],DP[Nmax],nr,mx;
int uz[Nmax];

void add(int nr)
{
    for (int i=mx+1;i<=nr;i++)
    {
        for (int a = 0,b = i-1;a<=b;a++,b--)
            uz[DP[a]^DP[b]] = i;

        int j;
        for (j=0;uz[j]==i || uz[j]==i-1;j++);
        DP[i] = j;
    }
    mx = nr;
}

int main()
{
    freopen("bowling.in","r",stdin);
    freopen("bowling.out","w",stdout);

    cin>>t;

    DP[1] = 1;
    uz[0] = 1;
    mx = 1;

    while (t--)
    {
        cin>>n;
        int rez = 0;
        nr = 0;
        for (int i=1;i<=n;i++)
        {
            cin>>v[i];
            if (v[i]==0)
            {
                if (nr>mx)
                    add(nr);
                rez ^= DP[nr];
                nr = 0;
            }
            else
                nr++;
        }
        if (nr>mx)
            add(nr);
        rez ^= DP[nr];
        if (rez==0)
            cout<<"Fumeanu\n";
        else
            cout<<"Nargy\n";
    }


    return 0;
}