Pagini recente » Cod sursa (job #2773373) | Borderou de evaluare (job #873669) | Cod sursa (job #59562) | Cod sursa (job #383238) | Cod sursa (job #328453)
Cod sursa(job #328453)
program strmatch;
var a,b:text;
i,j,k,m,n,q:integer;
z,x:array[1..2000000] of char;
pi:array[0..2000000] of integer;
match:array[1..400000] of integer;
begin
assign(a,'strmatch.in');
assign(b,'strmatch.out');
reset(a);
rewrite(b);
while not(eoln(a)) do
begin
i:=i+1;
Read(a,z[i]);
end;
Readln(a);
while not(eoln(a)) do
begin
j:=j+1;
Read(a,x[j]);
end;
m:=i;
n:=j;
k:=0;
pi[1]:=0;
i:=2;
while i<=m do
begin
while (k>0) and (z[k+1]<>z[i]) do
k:=pi[k];
if z[k+1]=z[i] then
k:=k+1;
pi[i]:=k;
i:=i+1;
end;
q:=0;
i:=1;
k:=0;
while i<=n do
begin
while (q>0) and (z[q+1]<>x[i]) do
q:=pi[q];
if z[q+1]=x[i] then
q:=q+1;
if q=m then begin q:=pi[m]; inc(k); match[k]:=i-m; end;
i:=i+1;
end;
Writeln(b,k);
for i:=1 to k do
Write(b,match[i],' ');
close(b);
end.