Cod sursa(job #37838)

Utilizator crawlerPuni Andrei Paul crawler Data 25 martie 2007 12:47:18
Problema Bowling Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 4, Clasa a 10-a Marime 2.16 kb
#include <stdio.h>

#define Dim 10000 

char buf[Dim];
int poz = 0;

void cit(int &x)
{
     x=0;
     while (buf[poz]<'0'){
           poz++;
           if (poz==Dim) fread(buf, 1, Dim, stdin), poz=0;
     }
     while (buf[poz]>='0'){
           x=x*10+buf[poz++]-'0';
           if (poz==Dim) fread(buf, 1, Dim, stdin), poz=0;
     }
}

int a[50004][2], v[50004];
int who;

int main()
 {
   freopen("bowling.in","r",stdin);
   freopen("bowling.out","w",stdout);
 
   fread(buf, 1, Dim, stdin), poz=0;

   int t,i,j,n;

   cit(t);



   for(j=0;j<t;++j)
    {
     cit(n);
     for(i=1;i<=n;++i)
      cit(v[i]);


     a[n+1][0] = 0;
     a[n+1][1] = 0;
     a[n][0] = 0;
     a[n][1] = 1;
     

     for(i=n-1;i>=0;--i)
      if(v[i])
       {
        a[i][1] = !(a[i+1][0] | a[i+1][1]);

        if(v[i+1] == 1)
         a[i][0] = !(a[i+2][1] | a[i+2][0]);
          else
         a[i][0] = 0;


       }
        else
       {
        a[i][0] = a[i+1][0];
        a[i][1] = a[i+1][1];
       }

/*     for(i=1;i<=n;++i)
      printf("%d ", i);
     printf("\n");
     for(i=1;i<=n;++i)
      printf("%d ",a[i][1]);
     printf("\n");      
     for(i=1;i<=n;++i)
      printf("%d ",a[i][0]);
     printf("\n");
*/

     if(a[1][1] | a[1][0])
      who = 1; // Nargy
       else
      who = 2; //Fumeanu


     for(i=1;i<=n/2;++i)
      v[i] = v[n-i+1];
      
     a[n+1][0] = 0;
     a[n+1][1] = 0;
     a[n][0] = 0;
     a[n][1] = 1;
     

     for(i=n-1;i>=0;--i)
      if(v[i])
       {
        a[i][1] = !(a[i+1][0] | a[i+1][1]);

        if(v[i+1] == 1)
         a[i][0] = !(a[i+2][1] | a[i+2][0]);
          else
         a[i][0] = 0;
       }
        else
       {
        a[i][0] = a[i+1][0];
        a[i][1] = a[i+1][1];
       }

     int who2;
       
     if(a[1][1] | a[1][0])
      who2 = 1; // Nargy
       else
      who2 = 2; //Fumeanu
      
      if(who2 == who)
       {
        if(who == 1)
         fputs("Nargy\n",stdout);
          else
         fputs("Fumeanu\n",stdout);
       }
        else
         fputs("Nargy\n",stdout);
    }

   return 0;
 }