Cod sursa(job #340947)

Utilizator ionutz32Ilie Ionut ionutz32 Data 17 august 2009 09:17:06
Problema Potrivirea sirurilor Scor 40
Compilator fpc Status done
Runda Arhiva educationala Marime 0.94 kb
var n,m:array[1..2000000] of char;
pi:array[1..2000000] of longint;
v:array[1..1000] of longint;
k,i,ln,lm,nrc:longint;
c:char;
f,g:text;
begin
assign(f,'strmatch.in');
assign(g,'strmatch.out');
reset(f);rewrite(g);
while not eoln(f) do
      begin
      read(f,c);
      ln:=ln+1;
      n[ln]:=c;
      end;
readln(f);
while not eof(f) do
      begin
      read(f,c);
      lm:=lm+1;
      m[lm]:=c;
      end;
pi[1]:=0;
for i:=2 to ln do
    begin
    while (k>0) and (n[k+1]<>n[i]) do
          k:=pi[k];
    if n[k+1]=n[i] then
       k:=k+1;
    pi[i]:=k;
    end;
k:=0;
for i:=1 to lm do
    begin
    if nrc=1000 then
       break;
    while (k>0) and (n[k+1]<>m[i]) do
          k:=pi[k];
    if n[k+1]=m[i] then
       k:=k+1;
    if k=ln then
       begin
       nrc:=nrc+1;
       v[nrc]:=i-ln;
       end;
    end;
writeln(g,nrc);
for i:=1 to nrc do
    write(g,v[i],' ');
close(f);close(g);
end.