Cod sursa(job #3173754)

Utilizator octavi26octavian octavi26 Data 23 noiembrie 2023 17:34:51
Problema Bowling Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <bits/stdc++.h>
#define N 50007

using namespace std;

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

int n;
int k;
int S[104];
int g[N + 1] = {0, 1, 2, 3, 1, 4, 3, 2, 1, 4, 2, 6, 4, 1, 2, 7, 1, 4, 3, 2, 1, 4, 6, 7, 4, 1, 2, 8, 5, 4, 7, 2, 1, 8, 6, 7, 4, 1, 2, 3, 1, 4, 7, 2, 1, 8, 2, 7, 4, 1, 2, 8, 1, 4, 7, 2, 1, 4, 2, 7, 4, 1, 2, 8, 1, 4, 7, 2, 1, 8, 6, 7, 4, 1, 2, 8, 1, 4, 7, 2, 1, 8, 2};
char A[2][20] = { "Nargy", "Fumeanu" };

void Citire()
{
    fin >> n;
}

void Rezolvare()
{
    int i;
    int x;
    int ct = 0, XOR = 0;
    for( i=1; i<=n; i++ )
    {
        fin >> x;
        if( x == 1 ) ct++;
        if( x == 0 )
        {
            XOR ^= ct;
            //cout << ct << " ";
            ct = 0;
        }
    }
    //cout << ct << "\n";
    XOR ^= ct;

    fout << ( XOR ? A[0] : A[1] ) << "\n";
}

int f[30000];

void Precalculare()
{
    int i, j;
    for( i=1; i<=N; i++ )
    {
        int m = 0;
        for( j=1; j<=i; j++ )
        {
            int XOR = 0;
            XOR ^= g[j - 1];
            XOR ^= g[i - j];
            f[++m] = XOR;
        }
        for( j=1; j<i; j++ )
        {
            int XOR = 0;
            XOR ^= g[j - 1];
            XOR ^= g[i - j - 1];
            f[++m] = XOR;
        }

        sort( f + 1, f + m + 1 );
        int mex = 0;
        for( j=1; j<=m; j++ )
            if( mex == f[j] ) mex++;
        g[i] = mex;
    }
}

void Precalculare2()
{
    int i;
    for( i=83; i<=N; i++ ) g[i] = g[i - 12];
}

int main()
{
    Precalculare2();

    int task;
    fin >> task;
    while( task-- )
    {
        Citire();
        Rezolvare();
    }
    return 0;
}