Cod sursa(job #463457)

Utilizator andrei.dAndrei Diaconeasa andrei.d Data 15 iunie 2010 22:56:07
Problema Bowling Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 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<=5000;++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=0;i<=10;++i)
   //      printf("%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;

}