Pagini recente » Cod sursa (job #1332458) | Monitorul de evaluare | Cod sursa (job #611931) | Cod sursa (job #225089) | Cod sursa (job #166675)
Cod sursa(job #166675)
var p:array[0..2000000] of longint;
sol:array[0..2000] of longint;
a,b:array[1..2000000] of char;
n,m,i:longint;
f,g:text;
procedure pi;
var i,k:longint;
begin
k:=0;
for i:=2 to n do begin
while (k<>0) and (a[k+1]<>a[i]) do
k:=p[k];
if a[k+1]=a[i] then
inc(k);
p[i]:=k;
end;
end;
procedure kmp;
var i,k:longint;
begin
pi; sol[0]:=0;
k:=0;
for i:=1 to m do begin
while (k<>0) and (b[i]<>a[k+1]) do
k:=p[k];
if b[i]=a[k+1] then
inc(k);
if k=n then begin
inc(sol[0]);
if sol[0]<=1000 then
sol[sol[0]]:=i-n;
k:=p[k];
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;
while not(eoln(f)) do begin
inc(m);
read(f,a[m]);
end;
kmp;
writeln(g,sol[0]);
if sol[0]>1000 then
sol[0]:=1000;
for i:=1 to sol[0] do
write(g,sol[i],' ');
close(f); close(g);
end.