Cod sursa(job #26862)

Utilizator Boss_2007Marian Ciprian Boss_2007 Data 5 martie 2007 21:59:51
Problema Amlei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.83 kb
#include<stdio.h>
char nc;
int  aux,linii,w,b,n,t,u,i,j,a,p,q,ok,x[501][51],y[501][51];
int egx(int ip,int jp)
{
	for(int z=1;z<=n;z++) if(x[ip][z]!=x[jp][z])return 0;
	return 1;
}
int swapx(int ip,int jp)
{
	for(int z=1;z<=n;z++)
	{aux=x[ip][z];x[ip][z]=x[jp][z];x[jp][z]=aux;}
	return 0;
}
int elibx(int ip)
{
	for(int z=1;z<=n;z++)
	x[ip][z]=0;
	return 0;
}
int egy(int ip,int jp)
{
	for(int z=1;z<=n;z++) if(y[ip][z]!=y[jp][z])return 0;
	return 1;
}
int swapy(int ip,int jp)
{
	for(int z=1;z<=n;z++)
	{aux=y[ip][z];y[ip][z]=y[jp][z];y[jp][z]=aux;}
	return 0;
}
int eliby(int ip)
{
	for(int z=1;z<=n;z++)
	y[ip][z]=0;
	return 0;
}
int per()
{
	int jy,okz;
	for(int z=1;z<=u;z++)
	{
		okz=1;
		for(int zz=1;zz<=n;zz++)
		if(x[1][zz]!=y[z][zz]){okz=0;break;}
		if(okz) return z;
	}
	return 0;
}
int main()
{	FILE *f,*g;
	f=fopen("amlei.in","rb");
	while(!feof(f))
	{ nc=getc(f);
	  if(nc=='\n')linii++;
	}
	fclose(f);
	w=linii/3;
	f=fopen("amlei.in","r");
	g=fopen("amlei.out","w");
	for(b=1;b<=w;b++)
	{ fscanf(f,"%d%d%d",&n,&t,&u);
	  for(i=1;i<=t;i++)
		for(j=1;j<=n;j++)
			{ fscanf(f,"%d",&a);
			  if(a>0) x[i][a]=1;}
	  for(i=1;i<=u;i++)
		for(j=1;j<=n;j++)
			{ fscanf(f,"%d",&a);
			  if(a>0) y[i][a]=1;}
	  for(i=1;i<t;i++)
		for (j=i+1;j<=t;j++)
			while(egx(i,j)==1)
			{swapx(j,t);elibx(t);t--;}
	  for(i=1;i<u;i++)
		for (j=i+1;j<=u;j++)
			while(egy(i,j)==1)
			{swapy(j,u);eliby(u);u--;}
	  ok=1;
	  if(t!=u) ok=0;
	  if(ok)
	   do{ j=per();
	      if(j==0) ok=0;
	      if(ok){ swapx(1,t);elibx(t);t--;
		      swapy(j,u);eliby(u);u--;
		    }
	   }while(ok&&(t>0));
	     if(ok==0){fprintf(g,"NU\n");
		       for(p=1;p<=t;p++)
		       elibx(p);
		       for(p=1;p<=u;p++)
		       eliby(p);
		      }
			else fprintf(g,"DA\n");
	}
	fcloseall();
	return 0;
}