Cod sursa(job #173629)

Utilizator GavrilaVladGavrila Vlad GavrilaVlad Data 7 aprilie 2008 21:45:11
Problema Potrivirea sirurilor Scor 14
Compilator fpc Status done
Runda Arhiva educationala Marime 1.15 kb
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.