Cod sursa(job #209830)

Utilizator FllorynMitu Florin Danut Flloryn Data 25 septembrie 2008 00:03:37
Problema Potrivirea sirurilor Scor 14
Compilator fpc Status done
Runda Arhiva educationala Marime 1.18 kb
program pascal;
var f,g:text;
    i,j,m,n,k,q:longint;
    a,b:array[1..2001000] of char;
    pi,po:array[1..2001000] of longint;
    ok:boolean;

    procedure citire;
    begin
       n:=1;
       m:=1;
       readln(f,a);
       while (ord(a[n])<>0) do n:=n+1;
       read(f,b);
       while (ord(b[m])<>0) do m:=m+1;
       n:=n-1;
       m:=m-1;
    end;

    procedure test;
    begin
    pi[1]:=0;
    k:=0;
    for i:=2 to n do
     begin
       while (k>0) and (a[k+1]<>a[i]) do k:=pi[k];
       if a[k+1]=a[i] then k:=k+1;
       pi[i]:=k;
     end;
      q:=0;
      k:=0;
      for i:=1 to n do
       begin
        while (q>0) and (a[q+1]<>b[i]) do q:=pi[q];
        if a[q+1]=b[i] then q:=q+1;
        if q=n then begin
                       k:=k+1;
                       po[k]:=i-n;
                    end;
       end;

    end;


begin
assign(f,'strmatch.in'); reset(f);
assign(g,'strmatch.out'); rewrite(g);
citire;
  if n>m then write(g,0)
         else
         begin
          test;
          writeln(g,k);
          if k>1000 then k:=1000;
          for i:=1 to k do write(g,po[i],' ');
         end;
close(f);
close(g);
end.