Pagini recente » Cod sursa (job #102117) | Cod sursa (job #13006) | Cod sursa (job #1615757) | Cod sursa (job #245673) | Cod sursa (job #166134)
Cod sursa(job #166134)
program kmp;
var a,b:array[0..2000001] of char;
v,c:array[0..2000001] of longint;
i,n,m:longint;
f,g:text;
procedure pi;
var i,k:longint;
begin
v[1]:=0; k:=0;
for i:=2 to m do begin
while (k>0) and (a[k+1]<>a[i]) do k:=v[k];
if a[k+1]=a[i] then inc(k);
v[i]:=k;
end;
end;
procedure kmp;
var q,i:longint;
begin
q:=0;
for i:=1 to m do begin
while (q>0) and(a[q+1]<>b[i]) do q:=v[q];
if(a[q+1]=b[i]) then inc(q);
if q=n then begin
inc(c[0]);
c[c[0]]:=i-n;
q:=v[q];
end;
end;
end;
begin
assign(f,'strmatch.in'); reset(f);
assign(g,'strmatch.out'); rewrite(g);
n:=0; m:=0;
while not(eoln(f)) do begin inc(n); read(f,a[n]); end;
readln(f);
while not(eoln(f)) do begin inc(m); read(f,b[m]); end;
pi;
c[0]:=0;
kmp;
writeln(g,c[0]);
for i:=1 to c[0]-1 do write(g,c[i],' ');
writeln(g,c[c[0]]);
close(f); close(g);
end.