Cod sursa(job #1179752)

Utilizator Mihai_ChihaiMihai Chihai Mihai_Chihai Data 29 aprilie 2014 10:32:02
Problema Potrivirea sirurilor Scor 26
Compilator fpc Status done
Runda Arhiva educationala Marime 0.72 kb
var t,p,s:ansistring;
    n,m,i,l,r,sol:longint;
    z,a:array[0..2000000] of longint;

begin
  assign(input,'strmatch.in');
  reset(input);
  assign(output,'strmatch.out');
  rewrite(output);
  readln(p);
  readln(t);
  n:=length(p);
  m:=length(t);
  s:=p+'#'+t;
  z[1]:=0;

  for i:=2 to n+m+1 do
     begin
      if i<=r then
         if z[i-l]<r-i then
           z[i]:=z[i-l] else z[i]:=r-i;
      while (i+z[i]<=n+m+1) and (s[z[i]+1]=s[i+z[i]]) do inc(z[i]);
      if i+z[i]>r then begin l:=i; r:=i+z[i]; end;
     end;

  for i:=1 to m do
    if z[i+1+n]=n then
     begin
      inc(sol);
      a[sol]:=i;
     end;
  writeln(sol);
  for i:=1 to sol do  write(a[i]-1,' ');
  close(output);
end.