Cod sursa(job #918314)

Utilizator apopeid13Apopeid Alejandro apopeid13 Data 18 martie 2013 19:58:16
Problema Amlei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.14 kb
#include<stdio.h>
char nc;
int  aux,linii,w,b,n,t,u,i,j,a,p,q,ok,x[501][51],y[501][51];
int egx(int ip,int jp)
{
    for(int z=1;z<=n;z++) if(x[ip][z]!=x[jp][z])return 0;
    return 1;
}
int swapx(int ip,int jp)
{
    for(int z=1;z<=n;z++)
    {aux=x[ip][z];x[ip][z]=x[jp][z];x[jp][z]=aux;}
    return 0;
}
int elibx(int ip)
{
    for(int z=1;z<=n;z++)
    x[ip][z]=0;
    return 0;
}
int egy(int ip,int jp)
{
    for(int z=1;z<=n;z++) if(y[ip][z]!=y[jp][z])return 0;
    return 1;
}
int swapy(int ip,int jp)
{
    for(int z=1;z<=n;z++)
    {aux=y[ip][z];y[ip][z]=y[jp][z];y[jp][z]=aux;}
    return 0;
}
int eliby(int ip)
{
    for(int z=1;z<=n;z++)
    y[ip][z]=0;
    return 0;
}
int per()
{
    int jy,okz;
    for(int z=1;z<=u;z++)
    {
        okz=1;
        for(int zz=1;zz<=n;zz++)
        if(x[1][zz]!=y[z][zz]){okz=0;break;}
        if(okz) return z;
    }
    return 0;
}
int main()
{   FILE *f,*g;
    f=fopen("amlei.in","rb");
    while(!feof(f))
    { nc=getc(f);
      if(nc=='\n')linii++;
    }
    fclose(f);
    w=linii/3;
    f=fopen("amlei.in","r");
    g=fopen("amlei.out","w");
    for(b=1;b<=w;b++)
    { fscanf(f,"%d%d%d",&n,&t,&u);
      for(i=1;i<=t;i++)
        for(j=1;j<=n;j++)
            { fscanf(f,"%d",&a);
              if(a>0) x[i][a]=1;}
      for(i=1;i<=u;i++)
        for(j=1;j<=n;j++)
            { fscanf(f,"%d",&a);
              if(a>0) y[i][a]=1;}
      for(i=1;i<t;i++)
        for (j=i+1;j<=t;j++)
            while(egx(i,j)==1)
            {swapx(j,t);elibx(t);t--;}
      for(i=1;i<u;i++)
        for (j=i+1;j<=u;j++)
            while(egy(i,j)==1)
            {swapy(j,u);eliby(u);u--;}
      ok=1;
      if(t!=u) ok=0;
      if(ok)
       do{ j=per();
          if(j==0) ok=0;
          if(ok){ swapx(1,t);elibx(t);t--;
              swapy(j,u);eliby(u);u--;
            }
       }while(ok&&(t>0));
         if(ok==0){fprintf(g,"NU\n");
               for(p=1;p<=t;p++)
               elibx(p);
               for(p=1;p<=u;p++)
               eliby(p);
              }
            else fprintf(g,"DA\n");
    }
    fcloseall();
    return 0;
}