DIGIT0 - Số 0 tận cùng

Tác giả: flashmt

Ngôn ngữ: Pascal

const max=10000;
var a:array['a'..'z'] of longint;
    u2,u5:array[0..max] of longint;
    re,n:longint;

procedure rf;
var c:char;
begin
     fillchar(a,sizeof(a),0);
     n:=0;
     while not eoln do
     begin
          inc(n);
          read(c);
          inc(a[c]);
     end;
end;

procedure init;
var i,j:integer;
begin
     fillchar(u2,sizeof(u2),0);
     fillchar(u5,sizeof(u5),0);
     for i:=1 to max do
     begin
          j:=i;
          u2[j]:=u2[j-1];
          while j mod 2 = 0 do
          begin
               j:=j div 2;
               inc(u2[i]);
          end;
     end;
     for i:=1 to max do
     begin
          j:=i;
          u5[j]:=u5[j-1];
          while j mod 5 = 0 do
          begin
               j:=j div 5;
               inc(u5[i]);
          end;
     end;
end;

procedure pr;
var c:char; k,t2,t5:longint;
begin
     init;
     t2:=0; t5:=0; re:=0;
     for c:='a' to 'z' do
         if a[c]>0 then
         begin
              k:=a[c];
              t2:=t2+u2[n]-u2[k]-u2[n-k];
              t5:=t5+u5[n]-u5[k]-u5[n-k];
              n:=n-a[c];
         end;
     if t2>t5 then re:=t5 else re:=t2;
end;

procedure wf;
begin
     write(re);
end;

begin
     rf;
     pr;
     wf;
end.

Download