Cod sursa(job #714777)

Utilizator gergocsegziCsegzi Gergely gergocsegzi Data 16 martie 2012 09:19:18
Problema Cel mai lung subsir comun Scor 10
Compilator fpc Status done
Runda Arhiva educationala Marime 1.95 kb
var n,m:word;
    i,j,k,max,v,h,e:integer;
    s:array[1..1050,1..1050]of word;
    kir:array[1..1050]of word;
    b,ki:text;

begin
        assign(b,'cmlsc.in');
        assign(ki,'cmlsc.out');

        reset(b);
        rewrite(ki);

        readln(b,n,m);

        for i:=1 to n do begin
                read(b,s[1,i+1]);

                        end;
        readln(b);

        for i:=1 to m do begin
                read(b,s[i+1,1]);

                        end;

        for i:=2 to m+1 do
                for j:=2 to n+1 do

                        if s[1,j]=s[i,1] then begin
                                max:=0;
                                for k:=j-1 downto 2 do
                                        if (s[1,j]>s[1,k]) AND (s[i,k]>max) then
                                                max:=s[i,k];

                                s[i,j]:=max+1;
                                for k:=i+1 to m+1 do if s[k,j]<max+1 then s[k,j]:=max+1;
                                        end;

        for i:=1 to m+1 do begin
                for j:=1 to n+1 do write(s[i,j]:3);
                writeln;
                        end;

        max:=0;

        for i:= n+1 downto 2 do if s[m+1,i]>max then begin max:=s[m+1,i]; h:=i; end;

        writeln(ki,max);

        kir[1]:=s[1,h];
        v:=2;
        max:=max-1;
        e:=h;

        for i:=h-1 downto 2 do if (s[m+1,i]=max) AND (max>0) AND (s[1,i]<=s[1,e])
                                                                then begin dec(max);
                                                                        kir[v]:=s[1,i];
                                                                        inc(v);
                                                                        e:=i;
                                                                  end;

       for i:=v-1 downto 1 do write(ki,kir[i],' ');

        close(b);
        close(ki);

end.