Cod sursa(job #1153690)

Utilizator Vele_GeorgeVele George Vele_George Data 25 martie 2014 17:37:33
Problema Potrivirea sirurilor Scor 40
Compilator fpc Status done
Runda Arhiva educationala Marime 0.98 kb
var a,b,v:array[1..2000003] of integer;
    c:char;
    i,j,sum_a,sum_b,n,m,nr:longint;
    f,g:text;

function match(st:longint):boolean;
 var i:longint;
  begin
   match:=true;
   for i:=1 to n do
    if a[i]<>b[st+i-1] then match:=false;
  end;

begin
assign(f,'strmatch.in');reset(f);
assign(g,'strmatch.out');rewrite(g);
m:=0;
n:=0;
sum_a:=0;
 while not eoln(f) do
  begin
   read(f,c);
   inc(n);
   a[n]:=ord(c);
   sum_a:=sum_a+a[n];
  end;

 readln(f);

 while not eoln(f) do
  begin
   read(f,c);
   inc(m);
   b[m]:=ord(c);
  end;

 nr:=0;
 sum_b:=0;
 for i:=1 to n do sum_b:=sum_b+b[i];

 for i:=1 to m-n+1 do begin
  if (sum_a=sum_b)and(match(i)=true)
   then begin
         inc(nr);
         v[nr]:=i-1;
        end;
  sum_b:=sum_b-b[i]+b[i+n];
 end;
 writeln(g,nr);
 if nr>1000 then
  for i:=1 to 1000 do write(g,v[i],' ')
            else
  for i:=1 to nr do write(g,v[i],' ');





close(f);
close(g);
end.