Cod sursa(job #2455769)

Utilizator VanillaSoltan Marian Vanilla Data 12 septembrie 2019 18:06:05
Problema Cel mai lung subsir comun Scor 90
Compilator fpc Status done
Runda Arhiva educationala Marime 1.57 kb
type vector = array[1..1024,1..1024] of integer;
var x:vector;
type vector2 = array[1..10000] of integer;
var y:vector2;
fin,fout:textfile;
i,e,a,lsirm,lsirn,current:integer;
function max(num1,num2:integer):integer;
begin
if num1>num2 then
    max:=num1
else
    max:=num2;
end;

begin
a:=0;
assign (fin, 'cmlsc.in');
reset(fin);
assign (fout, 'cmlsc.out');
rewrite(fout);
read(fin, lsirm, lsirn);
for i:=1 to lsirm do
    read(fin,x[i+2,1]);
for i:=1 to lsirn do
    read(fin,x[1,i+2]);
for i:=3 to lsirm+2 do begin
    for e:=3 to lsirn+2 do begin
        if x[1,e]=x[i,1] then begin 
            x[i,e]:=x[i-1,e-1]+1;
            {a:=a+1;
            y[a]:=x[1,e];
            writeln(x[1,e],'=',x[i,1],', cand i=',i,' si e=',e);}
            end
        else
            x[i,e]:=max(x[i-1,e],x[i,e-1]);
        end;
    end;
i:=lsirm+2;
e:=lsirn+2;
current:=x[i,e];
while current<>0 do  begin
    if x[i,1]=x[1,e] then begin
        //writeln(x[i,1],'=',x[1,e],' cand i=',i,' si e=',e);
        a:=a+1;
        y[a]:=x[i,1];
        i:=i-1;
        e:=e-1;
        end
    else begin
        if x[i,e-1]>x[i-1,e] then
            e:=e-1
        else 
            i:=i-1;
      end;
      current:=x[i,e];
      end;

         
            
        
    
    
{for i:=1 to lsirm+2 do begin
    writeln;
    for e:=1 to lsirn+2 do begin
        write(x[i,e]);
        end;
    end;}
writeln(fout,x[lsirm+2,lsirn+2]);
for i:=a downto 1 do 
    write(fout,y[i],' ');





close(fin);
close(fout);
end.
//1 7 3 9 8
//7 5 8