Cod sursa(job #70859)

Utilizator a7893Nae Mihai a7893 Data 7 iulie 2007 23:30:30
Problema Amlei Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.48 kb
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 26000
int n,t,u,v1[N],v2[N],a1[550][550],a2[550][550],k1,k2,l1,l2;
void afis()
{
	int i,j;
	for(i=0;i<k1;i++)
	{
		for(j=0;j<l1;j++)
			printf("%d ",a1[i][j]);
		printf("\n");
	}
	printf("\n");
	for(i=0;i<k2;i++)
	{
		for(j=0;j<l2;j++)
			printf("%d ",a2[i][j]);
		printf("\n");
	}
}
int same(int a1[550],int a2[550],int k)
{
	int i,ok=1;
	for(i=0;i<k;i++)
		if(a1[i]!=a2[i])
			ok=0;
	return ok;
}
int maxim(const void *a,const void *b)
{
	return *(int*)a-*(int*)b;
}
void sort(int v[550],int k)
{
	int i,ok,aux;
	do
	{
		ok=0;
		for(i=0;i<k-1;i++)
			if(v[i]>v[i+1])
			{
				aux=v[i];
				v[i]=v[i+1];
				v[i+1]=aux;
				ok=1;
			}
	}while(ok);
}
void init()
{
	int i,j;
	for(i=0;i<550;i++)
		for(j=0;j<550;j++)
			a1[i][j]=a2[i][j]=0;
	for(i=0;i<N;i++)
		v1[i]=v2[i]=0;
}
void sort2(int a[550][550])
{
	int i,ok,aux[550];
	do
	{
		ok=0;
		for(i=0;i<k1-1;i++)
			if(a[i][0]>a[i+1][0])
			{
				memcpy(aux,a[i],sizeof(a[i]));
				memcpy(a[i],a[i+1],sizeof(a[i+1]));
				memcpy(a[i+1],aux,sizeof(aux));
				ok=1;
			}
	}while(ok);
}
int correct()
{
	int i;
	sort2(a1);
	sort2(a2);
	for(i=0;i<k1;i++)
		if(!same(a1[i],a2[i],k1))
			return 0;
	return 1;
}
void read_solve()
{
	int i,j,k;
	while(scanf("%d",&n)!=EOF)
	{
		k1=l1=k2=l2=0;
		init();
		scanf("%d%d",&t,&u);
		for(i=0;i<n*t;i++)
			scanf("%d",&v1[i]);
		for(i=0;i<n*u;i++)
			scanf("%d",&v2[i]);
		a1[k1][l1++]=v1[0];
		for(i=1;i<n*t;i++)
			if(i%n==0)
			{
				l1=0;
				k1++;
				a1[k1][l1++]=v1[i];
			}
			else
				a1[k1][l1++]=v1[i];
		a2[k2][l2++]=v2[0];
		for(i=1;i<n*u;i++)
			if(i%n==0)
			{
				l2=0;
				k2++;
				a2[k2][l2++]=v2[i];
			}
			else
				a2[k2][l2++]=v2[i];
		k1=t;
		k2=u;
		for(i=0;i<k1;i++)
			sort(a1[i],l1);
		for(i=0;i<k2;i++)
			sort(a2[i],l2);
		//afis();
		//printf("\n");
		for(i=0;i<k1-1;i++)
			for(j=i+1;j<k1;j++)
				if(same(a1[i],a1[j],l1))
				{
					for(k=j;k<k1-1;k++)
						memcpy(a1[k],a1[k+1],sizeof(a1[k+1]));
					k1--;
				}
		for(i=0;i<k2-1;i++)
			for(j=i+1;j<k2;j++)
				if(same(a2[i],a2[j],l2))
				{
					for(k=j;k<k2-1;k++)
						memcpy(a2[k],a2[k+1],sizeof(a2[k+1]));
					k2--;
				}
		//afis();
		//printf("\n");
		if(k1==k2&&l1==l2&&correct())
			printf("DA\n");
		else
			printf("NU\n");
	}
}
int main()
{
	freopen("amlei.in","r",stdin);
	freopen("amlei.out","w",stdout);
	read_solve();
	return 0;
}