Cod sursa(job #822945)

Utilizator Buzu_Tudor_RoCont vechi Buzu_Tudor_Ro Data 24 noiembrie 2012 12:06:16
Problema Subsir Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.43 kb
Program p2;
const rest=666013;
var fi,fo:text; i,j,n,m:longint;
    a,nr:array[0..505,0..505] of longint;
    s1,s2:ansistring;

begin
    assign(fi,'subsir.in'); reset(fi); readln(fi,s1); read(fi,s2);
    assign(fo,'subsir.out'); rewrite(fo); n:=length(s1); m:=length(s2);

    for i:=0 to n+1 do begin a[i,0]:=0; nr[i,0]:=1; end;
    for j:=0 to m+1 do begin a[0,j]:=0; nr[0,j]:=1; end;

    for i:=1 to n do
       for j:=1 to m do
           if s1[i]=s2[j] then begin a[i,j]:=a[i-1,j-1]+1; nr[i,j]:=nr[i-1,j-1]; end
                          else begin
                           if a[i,j-1]>a[i-1,j] then begin a[i,j]:=a[i,j-1]; nr[i,j]:=nr[i,j-1]; end
                                                else if a[i-1,j]>a[i,j-1] then begin a[i,j]:=a[i-1,j]; nr[i,j]:=nr[i-1,j]; end
                                                                              else begin
                                                                                   a[i,j]:=a[i-1,j];
                                                                                   nr[i,j]:=(nr[i-1,j]+nr[i,j-1]) mod rest;
                                                                                   if a[i-1,j-1]=a[i-1,j] then nr[i,j]:=(rest+nr[i,j]-nr[i-1,j-1]) mod rest;
                                                                                   end;
                               end;
    write(fo,nr[n,m]);
    close(fi); close(fo);
end.