Cod sursa(job #327524)

Utilizator tamas_iuliaTamas Iulia tamas_iulia Data 29 iunie 2009 12:15:07
Problema Bowling Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <stdio.h>
#include <string.h>
#define MAX 71+12
#define A "Nargy"
#define B "Fumeanu"

int def[MAX*5];
int sg[MAX+2];
long t,i,n,sum,nr1,x;

void precal(){
	int i,j;
   sg[0]=0;
   for(i=1; i<=MAX;++i){
   	memset(def,0,sizeof(def));
   	for(j=1;j<=i;++j)  // cand despart cu o popica
        def[sg[j-1]^sg[i-j]]++;
      for(j=1;j<i;++j)  // cand despart cu 2 popice
        def[sg[j-1]^sg[i-j-1]]++;

      int x=0;
      while(def[x]) ++x;
      sg[i]=x;
	}
}

int main(){
	freopen("bowling.in","r",stdin);
   freopen("bowling.out","w",stdout);
   precal();

   scanf("%d",&t);
   for(; t; --t){
   	scanf("%ld",&n);
      sum=0; nr1=0;
      for(i=1;i<=n;++i){
      	scanf("%d",&x);
         if(x) nr1++;
         else
           if(nr1){
         	if(nr1<=71) sum ^= sg[nr1];
            else{
            	nr1-=71;
               nr1%=12;
               if(nr1==0) nr1=12;
               sum ^= sg[71+nr1];
            }
            nr1=0;
           }
      }
      if(nr1)
         	if(nr1<=71) sum ^= sg[nr1];
            else{
            	nr1-=71;
               nr1%=12;
               if(nr1==0) nr1=12;
               sum ^= sg[71+nr1];
            }
   	if(sum==0) printf("%s\n",B); else printf("%s\n",A);
   }

   fclose(stdin); fclose(stdout);
   return 0;
}