Cod sursa(job #556720)

Utilizator killerkaliKovacs Levente killerkali Data 16 martie 2011 11:54:52
Problema Cel mai lung subsir comun Scor 50
Compilator fpc Status done
Runda Arhiva educationala Marime 1.91 kb
uses crt;
type
     rec=record
      x,y,z:integer;
     end;
     vektor1=array[1..2000] of rec;
     matrix=array[1..2000,1..2000] of integer;
     vektor=array[1..2000] of integer;
var i,j,max,db,a,b,n,m,x1,y1:integer;
    v,v1,v3:vektor;
    v2:vektor1;
    x:matrix;
    f,g:text;
function maxi(a,b:integer):integer;
 var i,j,s:integer;
 begin
  s:=0;
  for i:= 1 to a do
   for j:= 1 to b do
    if x[i,j]>s
     then
      s:=x[i,j];
  max:=s;
 end;
begin
assign(f,'cmlsc.in');
reset(f);
readln(f,n,m);
for i:= 1 to n do
 read(f,v[i]);
readln(f);
for i:= 1 to m do
 read(f,v1[i]);
close(f);
{for i:= 1 to n do
 begin
 db:=0;
 for j:=1 to m do
  begin
   if v[i]=v1[j]
    then
     begin
     inc(db);
     if db<=1
      then
       begin
        v2[i]:=v2[i]+1;
        v2[i].a:=1;
        v2[i].b:=j;
        a:=v2[i];
        for k:= i+1 to n do
          v2[k]:=a;
     end;
  end; }
for i:= 1 to n do
 for j:= 1 to m do
  begin
   if v[i]=v1[j]
    then
     begin
     x[i,j]:=maxi(i-1,j-1)+1;
     inc(db);
     v2[db].x:=i;
     v2[db].y:=j;
     v2[db].z:=x[i,j];
     end;
   end;
max:=0;
for i:= 1 to db do
 if v2[i].z>max
  then
   begin
   max:=v2[i].z;
   x1:=v2[i].x;
   y1:=v2[i].y;
   end;
assign(g,'cmlsc.out');
rewrite(g);
writeln(g,max);
{for i:= 1 to x1 do
 begin
  db:=0;
 for j:= 1 to y1 do
  if (x[i,j]<>0) and (db<2)
   then
    begin
     inc(db);
     write(g,v[i],' ');
    end;
 end;    }
db:=0;
for i:= x1 downto 1 do
 for j:= 1 to y1 do
  if (x[i,j]=max) and (x[i,j]<>0)
   then
    begin
     inc(db);
     v3[db]:=v[i];
     dec(max);
    end;
{for i:= 1 to n do
 write(v[i],' ');
writeln;
for i:= 1 to m do
 write(v1[i],' ');}
for i:= db downto 1 do
 write(g,v3[i],' ');
{for i:= 1 to x1 do
 begin
 for j:= 1 to y1 do
  write(x[i,j],' ');
 writeln;
 end;               }
close(g);
 readln;
end.