Cod sursa(job #463460)

Utilizator andrei.dAndrei Diaconeasa andrei.d Data 15 iunie 2010 23:02:45
Problema Bowling Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <cstdio>
#include <cstring>

#define file_in "bowling.in"
#define file_out "bowling.out"

int T;
int sg[50100];
int n;

void citire()
{
    freopen(file_in,"r",stdin);
    freopen(file_out,"w",stdout);

    scanf("%d", &T);

}

void solve()
{
    int i,j,viz[50100],x,y;
    sg[0]=0;
    sg[1]=1;
    sg[2]=2;
    for (i=3;i<=500;++i)
    {
        memset(viz,0,sizeof(viz));
        for (j=0;j<=i-1;++j)
         {
             x=j;
             y=i-j-1;
             viz[sg[x]^sg[y]]=1;
         }
        for (j=0;j<=i-2;++j)
         {
             x=j;
             y=i-j-2;
             viz[sg[x]^sg[y]]=1;
         }
        j=0;
        while(viz[j]) j++;
        sg[i]=j;
    }
     for (i=501;i<=50000;++i) sg[i]=sg[72+(i-72)%12];

    //for (i=0;i<=72*2;++i)
    //     fprintf(stderr,"%d ", sg[i]);
   int suma=0,nr=0;

   while(T--)
   {
       suma=nr=0;
       scanf("%d", &n);
       for (i=1;i<=n;++i)
            {
                scanf("%d", &x);
                if (x==0)
                {
                    suma^=sg[nr];
                    nr=0;
                }
                else
                nr++;
            }
            suma^=sg[nr];
       //printf("%d\n", suma);
       if (suma==0)
       printf("Fumeanu\n");
       else
       printf("Nargy\n");

   }
}

int main()
{

    citire();
    solve();

    return 0;

}