Cod sursa(job #2456430)

Utilizator andreiomd1Onut Andrei andreiomd1 Data 14 septembrie 2019 12:54:52
Problema Bowling Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.05 kb
#include <fstream>
#include <cstring>

using namespace std;

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

const int NMAX = 5e4  + 5;

int T, N, A[NMAX];

int dp[NMAX], Ap[NMAX];

int main()
{
    dp[0] = 0;
    dp[1] = 1;
    dp[2] = 2;

    for(int i = 3; i <= 39; ++i)
    {
        memset(Ap, 0, sizeof(Ap));

        int mex = 0;

        for(int j = 1; j <= i; ++j)
        {
            int Add = 0;

            if(j < i)
            {
                Add = dp[j - 1] ^ dp[i - j - 1];
                ++Ap[Add];
            }

            Add = dp[j - 1] ^ dp[i - j];
            ++Ap[Add];
        }

        for(int j = 0; j <= 39; ++j)
            if(!Ap[j])
            {
                mex = j;

                break;
            }

        dp[i] = mex;
    }

    int cnt = 0;

    for(int i = 40; i <= 50000; ++i)
    {
        ++cnt;

        if(cnt == 1)
            dp[i] = 1;

        if(cnt == 2)
            dp[i] = 4;

        if(cnt == 3)
            dp[i] = 7;

        if(cnt == 4)
            dp[i] = 2;

        if(cnt == 5)
            dp[i] = 1;

        if(cnt == 6)
            dp[i] = 8;

        if(cnt == 7)
            dp[i] = 2;

        if(cnt == 8)
            dp[i] = 7;

        if(cnt == 9)
            dp[i] = 4;

        if(cnt == 10)
            dp[i] = 1;

        if(cnt == 11)
            dp[i] = 2;

        if(cnt == 12)
        {
            dp[i] = 8;

            cnt = 0;
        }
    }

    f >> T;

    while(T--)
    {
        f >> N;

        for(int i = 1; i <= N; ++i)
            f >> A[i];

        int Sum = 0;
        int lc = 0;

        for(int i = 1; i <= N; ++i)
        {
            if(A[i])
                ++lc;
            else
            {
                Sum ^= dp[lc];

                lc = 0;
            }
        }

        if(lc)
            Sum ^= dp[lc];

        if(Sum == 0)
            g << "Fumeanu";
        else g << "Nargy";

        g << '\n';
    }

    return 0;
}