Cod sursa(job #18646)

Utilizator Darth_NiculusIvan Nicolae Darth_Niculus Data 18 februarie 2007 12:53:44
Problema Amlei Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 2, Clasa a 9-a si gimnaziu Marime 1.67 kb
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

#define NMAX 60
#define MMAX 800

int i,j,n,m,k,A[MMAX][NMAX],B[MMAX][NMAX],VALS[NMAX];

void getVals(int x)
{
 int i;
 memset(VALS, 0 ,sizeof(VALS));
 for (i=1;i<=n;i++)
    if (A[x][i]<0)
      VALS[abs(A[x][i])]=0;
      else VALS[abs(A[x][i])]=1;
}

int Add(int x, int y)
{
 if (x == 1 && y == 1)
   return 1;
   else
 if (x == 1 && y == 0)
   return 0;
   else
 if (x == 0 && y == 1)
   return 0;
   else return 0;
}

int Orcomp(int x, int y)
{
 if (x == 1 && y == 1)
   return 1;
   else
 if (x == 1 && y == 0)
   return 1;
   else
 if (x == 0 && y == 1)
   return 1;
   else
 return 0;
}

int opp(int x)
{
 if (x == 0)
   return 1;
   else return 0;
}

int getValu_B(int n, int m)
{
 int VAL=0,i,j,VAL_CUR;
 for (i=1;i<=m;i++)
    {
     VAL_CUR=1;
     for (j=1;j<=n;j++)
        if (B[i][j]<0)
          VAL_CUR = Add(VAL_CUR,opp(VALS[abs(B[i][j])]));
          else VAL_CUR = Add(VAL_CUR,VALS[abs(B[i][j])]);
     VAL = Orcomp(VAL,VAL_CUR);
    }
 return VAL;
}

int main()
{
 freopen("amlei.out","w",stdout);
 FILE* f = fopen("amlei.in","r");
 while (!feof(f))
      {
       memset(A, 0 ,sizeof(A));
       memset(B, 0 ,sizeof(B));
       fscanf(f,"%d%d%d",&n,&m,&k);
       for (i=1;i<=m;i++)
       for (j=1;j<=n;j++)
          fscanf(f,"%d",&A[i][j]);
       for (i=1;i<=k;i++)
       for (j=1;j<=n;j++)
          fscanf(f,"%d",&B[i][j]);

       int gasit=1;
       for (i=1;i<=m;i++)
          {
           getVals(i);
           if (getValu_B(n,k) == 0)
             gasit=0;
          }

       if (gasit == 1)
         printf("DA\n");
         else printf("NU\n");
      }
 fclose(stdout);
 fclose(f);

 return 0;
}