Cod sursa(job #19014)

Utilizator robbyRobertino robert robby Data 18 februarie 2007 17:38:01
Problema Amlei Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.78 kb
#include <stdio.h>
#define nmax 25005
long n,t,u,a[nmax],b[nmax],i,j,na,nb,x,nr,ok,s,verif;
long sgn[nmax];
long long v[nmax];

FILE *f,*g;
int main()
{
  f=fopen("amlei.in","rt");
  g=fopen("amlei.out","wt");

  while (fscanf(f,"%ld %ld %ld",&n,&t,&u)==3)
  {
	for (i=1;i<=500;i++)
	  v[i]=0;
	na=n*t;
	for (i=1;i<=na;i++)
	  fscanf(f,"%ld",&a[i]);
	nb=n*u;
	for (i=1;i<=nb;i++)
	  fscanf(f,"%ld",&b[i]);

	nr=0;
	for (i=1;i<=na;i+=n)
	  {
		x=i+n;
		nr++;
		for (j=i;j<x;j++)
		  {
			if (a[j]<0)
				sgn[-a[j]] = 0;
			else
				sgn[a[j]] = 1;
		  }
		for (j=1;j<=n;j++)
			v[nr] += (1 << (j-1)) * sgn[j];
	  }

	ok=1;
	nr=0;
	for (i=1;i<=nb&&ok;i+=n)
	  {
		x=i+n;
		nr++;
		s=0;

		for (j=i;j<x;j++)
		  {
			if (b[j]<0)
				sgn[-b[j]] = 0;
			else
				sgn[b[j]] = 1;
		  }
		for (j=1;j<=n;j++)
			s += (1 << (j-1)) * sgn[j];

		verif=1;
		for (j=1;j<=t;j++)
		  if (s==v[j])
			{
			  verif=0;
			  break;
			}
		if (verif)
		  {
			ok=0;
			break;
		  }
	  }

if (ok)
 {
	for (i=1;i<=500;i++)
	  v[i]=0;
	nr=0;
	for (i=1;i<=nb;i+=n)
	  {
		x=i+n;
		nr++;
		for (j=i;j<x;j++)
		  {
			if (b[j]<0)
				sgn[-b[j]] = 0;
			else
				sgn[b[j]] = 1;
		  }
		for (j=1;j<=n;j++)
			v[nr] += (1 << (j-1)) * sgn[j];
	  }

	nr=0;
	for (i=1;i<=na&&ok;i+=n)
	  {
		x=i+n;
		nr++;
		s=0;

		for (j=i;j<x;j++)
		  {
			if (a[j]<0)
				sgn[-a[j]] = 0;
			else
				sgn[a[j]] = 1;
		  }
		for (j=1;j<=n;j++)
			s += (1 << (j-1)) * sgn[j];

		verif=1;
		for (j=1;j<=u;j++)
		  if (s==v[j])
			{
			  verif=0;
			  break;
			}
		if (verif)
		  {
			ok=0;
			break;
		  }
	  }
 }
	if (ok)
	  fprintf(g,"DA\n");
	 else
	  fprintf(g,"NU\n");
  }
  while (!feof(f));
  fclose(f);
  fclose(g);
  return 0;
}