Cod sursa(job #793718)

Utilizator danalex97Dan H Alexandru danalex97 Data 3 octombrie 2012 21:24:02
Problema Bowling Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>
#include <cstring>
using namespace std;

const int Nmax = 550;
const int Stop = 520;

#define win "Nargy"
#define lost "Fumeanu"

int SG[Nmax];
bool Ok[Nmax];
int Sol,T,N;

ifstream F("bowling.in");
ofstream G("bowling.out");

int main()
{
    F>>T;

    SG[0]=0;
    for (int i=1;i<=Stop;++i)
    {
        memset(Ok,0,sizeof(Ok));

        for (int j=1;j<=i;++j)
        {
            Ok[ SG[j-1]^SG[i-j] ]=1;
            if ( i>j ) Ok[ SG[j-1]^SG[i-j-1] ] = 1;
        }

        for (SG[i]=0;Ok[SG[i]];++SG[i]);
    }

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

        Sol=0;
        int v=0;

        for (int i=1,x;i<=N;++i)
        {
            F>>x;
            if ( x==0 )
            {
                if ( v ) Sol ^= SG[v];
                v=0;
            }
            else
                ++v;
        }

        if ( v ) Sol ^= SG[v];
        G<<( Sol  ? win : lost )<<'\n';
    }
}