Cod sursa(job #20188)

Utilizator andrewgPestele cel Mare andrewg Data 20 februarie 2007 20:20:54
Problema Amlei Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.26 kb
const maxn = 30000;

var fi,fo:text;
    n,x,y,i,j,l:longint;
    ok,okk:boolean;
    a,b:array[1..maxn]of longint;

procedure sorta(l,r:longint);
var i,j,x,y:longint;
begin
   i:=l;
   j:=r;
   x:=a[(l+r) div 2];
   repeat
      while a[i]<x do i:=i+1;
      while x<a[j] do j:=j-1;
      if i<=j then
      begin
         y:=a[i];
         a[i]:=a[j];
         a[j]:=y;
         i:=i+1;
         j:=j-1;
      end;
   until i>j;
   if l<j then sorta(l,j);
   if i<r then sorta(i,r);
end;

procedure sortb(l,r:longint);
var i,j,x,y:longint;
begin
   i:=l;
   j:=r;
   x:=b[(l+r) div 2];
   repeat
      while b[i]<x do i:=i+1;
      while x<b[j] do j:=j-1;
      if i<=j then
      begin
         y:=b[i];
         b[i]:=b[j];
         b[j]:=y;
         i:=i+1;
         j:=j-1;
      end;
   until i>j;
   if l<j then sortb(l,j);
   if i<r then sortb(i,r);
end;

procedure comp(p,q:longint);
var k:longint;
begin
   k:=1;
   l:=1;
   ok:=false;
   if a[k+(p-1)*n]<>b[l+(q-1)*n] then exit;
   while (k<n) do
   begin
      while a[k+(p-1)*n]=a[k+(p-1)*n+1] do inc(k);
      inc(k);
      while b[l+(q-1)*n]=b[l+(q-1)*n+1] do inc(l);
      inc(l);
      if a[k+(p-1)*n]<>b[l+(q-1)*n] then exit;
   end;
   ok:=true;
end;

procedure solve;
begin
   i:=1;
   j:=1;
   okk:=false;
   for i:=1 to x do
   begin
      for j:=1 to y do
      begin
         comp(i,j);
         if ok then break;
      end;
      if ok=false then
      begin
         exit;
      end;
   end;
   okk:=true;
end;

procedure readdata;
begin
   assign(fi,'amlei.in');
   assign(fo,'amlei.out');
   reset(fi);
   rewrite(fo);
   while not eof(fi) do
   begin
      readln(fi,n,x,y);
      l:=0;
      for i:=1 to x do
      begin
         for j:=1 to n do
         begin
            inc(l);
            read(fi,a[l]);
         end;
         sorta(1+(i-1)*n,i*n);
      end;
      l:=0;
      for i:=1 to y do
      begin
         for j:=1 to n do
         begin
            inc(l);
            read(fi,b[l]);
         end;
         sortb(1+(i-1)*n,i*n);
      end;
      solve;
      if okk then writeln(fo,'DA')
            else writeln(fo,'NU');
   end;
   close(fo);
   close(fi);
end;

begin
   readdata;
end.