Cod sursa(job #41980)

Utilizator robbyRobertino robert robby Data 28 martie 2007 19:19:53
Problema Bowling Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <stdio.h>
#include <stdlib.h>
#define nmax 5000//1
long a[nmax],b[12][nmax],nr;


FILE *f,*g;
int compare(const void *a,const void *b)
{
  return *(int*)b-*(int*)a;
}

int main()
{
  long n,i,j,t,ok,cas,x,y,in;
  f=fopen("bowling.in","rt");
  g=fopen("bowling.out","wt");
  fscanf(f,"%ld\n",&t);
  for (i=1;i<=t;i++)
	{
	  nr=0;
	  fscanf(f,"%ld",&n);
	  ok=1;
	  for (j=1;j<=n;j++)
		{
		  fscanf(f,"%ld",&a[j]);
		  if (a[j]==1&&ok)
			{
			  nr++;
			  ok=0;
			}
		   else
		  if (a[j]==0)
			ok=1;
		  if (!ok)
			b[i][nr]++;
		}
	  x=b[i][1];
	  for (j=2;j<=nr;j++)
		x=x^b[i][j];
	  cas=x;

	  if (cas==0)
		fprintf(g,"Fumeanu\n");
	   else
	  {
	  qsort(b[i]+1,nr,sizeof(long),compare);
	  ok=1;
	  in=1;
	  do
	  {
	  for (j=1;j<=nr;j++)
		{
		  x=b[i][j];
		  cas=1;
		  while (cas!=0&&b[i][j]>0)
			{
			  b[i][j]--;
			  cas=b[i][1];
			  for (n=2;n<=nr;n++)
				cas=cas^b[i][n];

			}
		  if (!cas)
		  {
		  y=x-b[i][j];
		  if (y%3!=0)
			{
			  ok++;
			  ok=ok%2;
			  in=nr+1;
			  break;
			}
		  }
		  b[i][j]=x;
		}
	  if (b[j][in]%3==0&&in<=nr)
		ok++;
	  ok=ok%2;
	  in++;
	  }
	  while (in<=nr);
	  ok=ok%2;
	  if (!ok)
		fprintf(g,"Nargy\n");
	   else
		fprintf(g,"Fumeanu\n");
	  }
	}

  fclose(f);
  fclose(g);
  return 0;
}