Cod sursa(job #475372)

Utilizator DraStiKDragos Oprica DraStiK Data 6 august 2010 20:40:51
Problema Amlei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <algorithm>
using namespace std;

#define DIM 505
#define MAX 55

struct vector {int a[MAX];} v[DIM],w[DIM];
int n,t,u;

void read ()
{
    int i,j;

    for (i=1; i<=t; ++i)
        for (j=1; j<=n; ++j)
            scanf ("%d",&v[i].a[j]);
    for (i=1; i<=u; ++i)
        for (j=1; j<=n; ++j)
            scanf ("%d",&w[i].a[j]);

}

struct cmp
{
    bool operator () (const vector &x,const vector &y) const
    {
        int i;

        for (i=1; i<=n; ++i)
            if (x.a[i]!=y.a[i])
                return x.a[i]<y.a[i];
        return 0;
    }
};

inline int lafel (const vector &x,const vector &y)
{
    int i;

    for (i=1; i<=n; ++i)
        if (x.a[i]!=y.a[i])
            return 0;
    return 1;
}

int solve ()
{
    int i,j,k;

    for (i=1; i<=t; ++i)
        sort (v[i].a+1,v[i].a+n+1);
    sort (v+1,v+t+1,cmp ());
    for (i=1; i<=u; ++i)
        sort (w[i].a+1,w[i].a+n+1);
    sort (w+1,w+u+1,cmp ());
    for (i=j=1; i<=t && j<=u; ++i, ++j)
    {
        for ( ; i<t && lafel (v[i],v[i+1]); ++i);
        for ( ; j<u && lafel (w[j],w[j+1]); ++j);
        if (!lafel (v[i],w[j]))
            return 0;
    }
    return 1;
}

int main ()
{
    freopen ("amlei.in","r",stdin);
    freopen ("amlei.out","w",stdout);

    for ( ; scanf ("%d%d%d",&n,&t,&u)==3; )
    {
        read ();
        if (solve ())
            printf ("DA\n");
        else
            printf ("NU\n");
    }

    return 0;
}