Cod sursa(job #19872)

Utilizator tudalexTudorica Constantin Alexandru tudalex Data 20 februarie 2007 10:06:20
Problema Amlei Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <stdio.h>
FILE *f,*g;
int a[2][51][51],
    v[51];
int n,t,u,i,j;

void presume(int p, int x)
{
	for (int i=1;i<=n;++i) if (a[p][x][i]<0) v[a[p][x][i]*(-1)]=0; else v[a[p][x][i]]=1;
}

int check(int p)
{
	int i,j,d,g,s=0;
	if (p==0) d=t; else d=u; 
	for (i=1;i<=d;++i)
	{
		g=1;
		for (j=1;j<=n;++j)
		{
			if (a[p][i][j]<0)
			{
				g*=1-v[a[p][i][j]*(-1)];
			}
			else
			{
				g*=v[a[p][i][j]];
			}
		}
		s+=g;
	}
	if (s>=1) return 1; else return 0;
}

void runtest()
{
	int i,r;
	for (i=1;i<=t;++i)
	{
		presume(0,i);
		r=check(1);
		if (r==0)
		{
			fprintf(g,"NU\n");
			return;
		}
	}
	for (i=1;i<=u;++i)
	{
		presume(1,i);
		r=check(0);
		if (r==0) 
		{
			fprintf(g,"NU\n");
			return;
		}
	}
	fprintf(g,"DA\n");
}

int main()
{
	f=fopen("amlei.in","r");
	g=fopen("amlei.out","w");
	fprintf(stderr,"CUCUBAU\n");
	while (fscanf(f,"%d %d %d\n",&n,&t,&u) == 3)
	{
		for (i=1;i<=t;++i) 
			for (j=1;j<=n;++j) fscanf(f,"%d",&a[0][i][j]);
		fscanf(f,"\n");
		for (i=1;i<=u;++i) 
			for (j=1;j<=n;++j) fscanf(f,"%d",&a[1][i][j]);
		fscanf(f,"\n");
		runtest();
		
	}
	return 0;
}