Pagini recente » Cod sursa (job #151246) | Cod sursa (job #2366031) | Cod sursa (job #1016006) | Istoria paginii utilizator/nuinimic | Cod sursa (job #173629)
Cod sursa(job #173629)
var v:array[0..2000000]of longint;
z:array[1..1000]of longint;
m,n,i,j,k,p,l,pu:longint;
b,u:int64;
c:char;
f:text;
begin
u:=0;
assign(f,'strmatch.in');
reset(f);
while not eoln(f) do
begin
read(f,c);
u:=u*62;
m:=m+1;
if c in ['0'..'9'] then u:=u+ord(c)-30;
if c in ['A'..'Z'] then u:=u+ord(c)-65+10;
if c in ['a'..'z'] then u:=u+ord(c)-97+26+10;
u:=u mod 666013;
end;
readln(f);
while not eoln(f) do
begin
read(f,c);
n:=n+1;
if c in ['0'..'9'] then v[n]:=ord(c)-30;
if c in ['A'..'Z'] then v[n]:=ord(c)-65+10;
if c in ['a'..'z'] then v[n]:=ord(c)-97+26+10;
end;
close(f);
k:=0;
pu:=1;
for i:=1 to m-1 do
begin
pu:=pu*62 mod 666013;
b:=(b*62+v[i])mod 666013;
end;
while(i<n)and(k<1000)do
begin
i:=i+1;
b:=b-v[i-m]*pu;
b:=(b*62+v[i])mod 666013;
while b<0 do
b:=b+666013;
if b=u then begin k:=k+1;
z[k]:=i-m;
end;
end;
assign(f,'strmatch.out');
rewrite(f);
writeln(f,k);
for i:=1 to k do
write(f,v[i],' ');
writeln(f);
close(f);
end.