Pagini recente » Cod sursa (job #966931) | Cod sursa (job #2947590) | Cod sursa (job #2714974) | Cod sursa (job #535746) | Cod sursa (job #174852)
Cod sursa(job #174852)
var a,b:array[1..2000000] of char;
nr,n,m,k,q:longint; c:char;
v,vv:array[1..2000000] of longint;
procedure prefix;
begin
{v[1]:=0;} k:=0;
for q:=2 to m do
begin
while (k>0)and(b[k+1]<>b[q]) do k:=v[k];
if b[k+1]=b[q] then k:=k+1;
v[q]:=k;
end;
end;
begin
assign(input,'strmatch.in'); reset(input);
m:=0;while not seekeoln do begin read(c);inc(m);b[m]:=c; end;
readln;
n:=0;while not seekeoln do begin read(c);inc(n);a[n]:=c; end;
close(input);
prefix;
k:=0; nr:=0;
q:=1;
while(q<=n) do
begin
while (k>0)and(b[k+1]<>a[q]) do k:=v[k];
if b[k+1]=a[q] then k:=k+1;
if k=m then begin inc(nr);vv[nr]:=q-m; k:=v[k]; end;
q:=q+1;
end;
assign(output,'strmatch.out'); rewrite(output);
writeln(nr);
for q:=1 to nr do write(vv[q],' ');
close(output);
end.