Cod sursa(job #19162)

Utilizator pauldbPaul-Dan Baltescu pauldb Data 18 februarie 2007 20:19:32
Problema Amlei Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

#define maxn 5010

int n,m,l;
int a[maxn],b[maxn],c[maxn],d[maxn],x[maxn],y[maxn];

int egal(int x,int y)
{
    int i;
    
    for (i=1;i<=n;i++)
      if (a[x+i]!=b[y+i]) return 0;
      
    return 1;
}

int main()
{
    freopen("amlei.in","r",stdin);
    freopen("amlei.out","w",stdout);
    
    int i,j,found;
    
    while (!feof(stdin))
    {
          scanf("%d %d %d",&n,&m,&l);
          
          if ((n==0) && (m==0) && (l==0)) break;
          
          for (i=1;i<=m*n;i++) scanf("%d ",&a[i]);
          for (i=1;i<=l*n;i++) scanf("%d ",&b[i]);
          
          for (i=1;i<=m;i++) 
          {
            x[i]=0;
            for (j=1;j<=n;j++) x[i]+=a[(i-1)*n+j];
            sort(a+(i-1)*n+1,a+i*n+1);
          }
            
          for (i=1;i<=l;i++)
          {
            y[i]=0; 
            for (j=1;j<=n;j++) y[i]+=b[(i-1)*n+j];
            sort(b+(i-1)*n+1,b+i*n+1);
          }
                      
          for (i=1;i<=m;i++)
          {
            found=0;
            for (j=1;j<=l;j++) 
              if ((x[i]==y[j]) && (egal((i-1)*n,(j-1)*n))) 
              {
                   found=1;
                   break;
              }
                        
            if (!found) 
            {
                printf("NU\n");
                break;
            }
          }
          
          if (found) printf("DA\n");
    }
    
    return 0;
}