Cod sursa(job #18281)

Utilizator tudalexTudorica Constantin Alexandru tudalex Data 18 februarie 2007 11:13:01
Problema Amlei Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 2, Clasa a 10-a Marime 1 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");
	while (!feof(f))
	{
		fscanf(f,"%d %d %d",&n,&t,&u);
		for (i=1;i<=t;++i) 
			for (j=1;j<=n;++j) fscanf(f,"%d",&a[0][i][j]);
		for (i=1;i<=u;++i) 
			for (j=1;j<=n;++j) fscanf(f,"%d",&a[1][i][j]);
		runtest();
		
	}
	return 0;
}