Cod sursa(job #747099)

Utilizator mada0222Tomus Madalina mada0222 Data 11 mai 2012 18:49:39
Problema Potrivirea sirurilor Scor 80
Compilator fpc Status done
Runda Arhiva educationala Marime 1.22 kb
program podsf;
var f,g:text;
sir,subsir:ansistring;
i,j,k,lsir,lsubsir,nr:longint;
a:array[1..200000] of longint;
v:array[1..1005] of longint;
bufin,bufout:array[1..65000] of byte;
procedure creare;
begin
  for j:=2 to lsubsir do
     begin
        while (k>0) and (subsir[k+1]<>subsir[j]) do
          k:=a[k];
        if subsir[k+1]=subsir[j] then
           k:=k+1;
        a[j]:=k;
     end;
end;
begin
assign(f,'strmatch.in'); reset(f);
assign(g,'strmatch.out'); rewrite(g);
settextbuf(f,bufin);
settextbuf(g,bufout);
readln(f,subsir); readln(f,sir);
lsir:=length(sir);
lsubsir:=length(subsir);
k:=0;
creare;
  k:=0;
     for j:=1 to lsir do
        begin
          while (k>0) and (sir[j]<>subsir[k+1]) do
             k:=a[k];
          if sir[j]=subsir[k+1] then
            k:=k+1;
            if k=lsubsir then
              begin
              nr:=nr+1;
              if nr<=1000 then
              v[nr]:=j-k;
              k:=a[k];
              end;
        end;
        writeln(g,nr);
        if nr<1000 then
          for i:=1 to nr do
             write(g,v[i],' ')
             else
               for i:=1 to 1000 do
                  write(g,v[i],' ');
close(f);
close(g);
end.