#1 linshutan@2008-11-07 18:16:00
8430
回复
删除
program p1;
var s1,s2:ansistring;
a:array[0..100000]of longint;
p:array[0..100000]of longint;
len1,len2,i,j,k,n,m,ans:longint;
ch:char;
procedure kmp;
var i,j,k:longint;
begin
p[1]:=0;
j:=0;
for i:=2 to len1 do
begin
while (j>0)and(s1[j+1]<>s1[i]) do j:=p[j];
if s1[j+1]=s1[i] then inc(j);
p[i]:=j;
end;
end;
begin
readln(s1);
readln(s2);
len1:=length(s1);
len2:=length(s2);
j:=0;
ans:=0;
kmp;
for i:=1 to len2 do
begin
while (j>0)and(s1[j+1]<>s2[i]) do j:=p[j];
if s1[j+1]=s2[i] then inc(j);
if j=len1 then
begin
inc(ans);
a[ans]:=i-j+1;
j:=p[j];
end;
end;
if ans=0 then writeln(’There must be something wrong.’)
else
begin
writeln(ans);
for i:=1 to ans do writeln(a[i]);
end;
end.