讨论 / 怎么AC啊
lc123456 2008-11-07 21:06:00
点我顶贴 收藏 删除
只有80 啊

#1 linshutan@2008-11-07 18:16:00
回复 删除
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.

#2 zhaoml529@2008-11-07 21:06:00
回复 删除
为什么我写的KMP 都超时- -~!
查看更多回复
提交回复