Cod sursa(job #47556)

Utilizator stef2nStefan Istrate stef2n Data 3 aprilie 2007 19:57:46
Problema Bowling Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <cstdio>

#define infile "bowling.in"
#define outfile "bowling.out"
#define NMAX 50001
#define FIRST "Nargy"
#define SECOND "Fumeanu"
#define PERIOD 12

FILE *fin,*fout;
int N,SG[NMAX];
bool used[NMAX];

void precalc()
  {
   int i,j;
   SG[0]=0;
   for(i=1;i<=N && i<84;i++)
      {
       for(j=0;j<=i;j++)
          used[j]=false;
       for(j=1;j<=i;j++)
          used[ SG[j-1] ^ SG[i-j] ] = true;
       for(j=1;j<=i-1;j++)
          used[ SG[j-1] ^ SG[i-j-1] ] = true;
       j=0;
       while(used[j])
            j++;
       SG[i]=j;
      }
   for(i=84;i<=N;i++)
      SG[i]=SG[i-PERIOD];
  }


int main()
{
int i,t,cnt,val,sol;
fin=fopen(infile,"r");
fout=fopen(outfile,"w");
fscanf(fin,"%d",&t);
while(t)
     {
      fscanf(fin,"%d",&N);
      precalc();
      cnt=0;
      sol=0;
      for(i=0;i<N;i++)
         {
          fscanf(fin,"%d",&val);
          if(val)
            cnt++;
          else
            {
             sol = sol ^ SG[cnt];
             cnt=0;
            }
         }
      if(cnt)
        sol = sol ^ SG[cnt];
      if(sol)
        fprintf(fout,"%s\n",FIRST);
      else
        fprintf(fout,"%s\n",SECOND);
      t--;
     }
fclose(fin);
fclose(fout);
return 0;
}