Cod sursa(job #19184)

Utilizator luana_0105Fagarasan Luana luana_0105 Data 18 februarie 2007 20:52:09
Problema Amlei Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.24 kb
//#define DEBUG
#include <stdio.h>

FILE *fin, *fout;
#ifdef DEBUG
	FILE *ftest;
#endif
int n,t,u;
int i,j,x;
int sfarsit_fisier;
int nr_teste;

int main(void)
{
int a[500][50];
int b[500][50];
int z[50];
unsigned long int test,tmp;
int val_A, val_B,val_andA,val_andB, verif;
char c;

	fin=fopen("amlei.in","r");
	fout=fopen("amlei.out","w");
#ifdef DEBUG
	ftest=fopen("amlei.tst","w");
#endif

	while(!feof(fin))
	{

		if (EOF==fscanf(fin,"%d",&n)) break;
		fscanf(fin,"%d",&t);
		fscanf(fin,"%d",&u);
		//citeste prima formula din test
		for (j=0;j<t;j++)
		{
			for (i=0; i<n; i++)
			{
				fscanf(fin,"%d",&x);
				if (x<0) a[j][-x-1]=-1;
				else a[j][x-1]=1;
			}
		}
		//citeste a doua formula din test
		for (j=0;j<u;j++)
		{
			for (i=0; i<n; i++)
			{
				fscanf(fin,"%d",&x);
				if (x<0) b[j][-x-1]=-1;
				else b[j][x-1]=1;
			}
		}
#ifdef DEBUG
		fprintf(ftest,"A\n");
		for (j=0;j<t;j++)
		{
			for (i=0;i<n;i++)
				fprintf(ftest,"%2.0d, ",a[j][i]);
			fprintf(ftest,"\n");
		}
		fprintf(ftest,"\n\nB\n");
		for (j=0;j<u;j++)
		{
			for (i=0;i<n;i++)
				fprintf(ftest,"%2.0d, ",b[j][i]);
			fprintf(ftest,"\n");
		}
		fprintf(ftest,"\n\Z\n");
#endif	//end test citire

		nr_teste=1;
		for (i=0;i<n;i++)
			nr_teste=2*nr_teste;
		verif=1;
		for (test=0;test<nr_teste ;test++)
		{

			//vector de test
			tmp=test;
			for(i=0; i<n; i++)
			{
				z[i]=tmp&1;
				tmp=tmp >> 1;
			}

			val_A=0;
			val_B=0;
			for (j=0;j<t;j++)
			{
				val_andA=1;
				for (i=0; i<n;i++)
				{
					if (a[j][i]>0)
						val_andA=val_andA&&z[i];
					else
						if(z[i]==1) val_andA=0;
				}
				val_A=val_A||val_andA;
			}
			for (j=0;j<u;j++)
			{
				val_andB=1;
				for (i=0; i<n;i++)
				{
					  if (b[j][i]>0)
						val_andB=val_andB && z[i];
					  else
						if(z[i]==1) val_andB=0;
				}
				val_B=val_B || val_andB;
			}

			verif=verif && (val_A == val_B);
#ifdef DEBUG
			for (i=0;i<n;i++)
				fprintf(ftest,"%2.0d, ",z[i]);
			fprintf(ftest," A=%2.0d B=%2.0d",val_A, val_B);
			fprintf(ftest,"\n");
#endif
//end test
		}
		if(verif)
			fprintf(fout,"DA\n");
		else
			fprintf(fout,"NU\n");
	}
#ifdef DEBUG
	fclose(ftest);
#endif
//end test
	return 0;
}