Cod sursa(job #38425)

Utilizator MariusGeantaMarius Geanta MariusGeanta Data 25 martie 2007 19:38:08
Problema Next Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.83 kb
{ Next/preONI 2007 runda 4 }
program sdf;
    var n,t:array[0..10000] of 0..9;
        d:array[0..18] of 0..9;
        z:array[1..10000] of integer;
        f:text;
        l,k,i,control,j,p,s,aux:integer;
        c:char;
        stop,b:boolean;
begin
     { citire date de intrare }
     assign(f,'next.in');reset(f);
     l:=0;
     while not eoln(f) do begin
           read(f,c);
           l:=l+1;
           val(c,n[l],control);
                          end;
     readln(f);k:=0;
     while not eof(f) do begin
           read(f,c);
           k:=k+1;
           val(c,d[k],control);
                         end;
     close(f);
     { inversez vectorii }
     for i:=1 to l div 2 do begin
         aux:=n[i];
         n[i]:=n[l-i+1];
         n[l-i+1]:=aux;
                       end;
     for i:=1 to k div 2 do begin
         aux:=d[i];
         d[i]:=d[k-i+1];
         d[k-i+1]:=aux;
                       end;
     { initializare vector ce are rol de inmultitor }
     p:=1;
     t[p]:=1;
     s:=k;
     for i:=1 to s do z[i]:=d[i];
     { generare m }
     stop:=false;
     while not stop do begin
           i:=l;j:=s;b:=false;
           while (i>=1)and(j>=1)and not b do
                 if n[i]=z[j] then begin
                                        i:=i-1;
                                        j:=j-1;
                                   end
                              else b:=true;
           if (n[i]<=z[j])and(l<=s) then
              stop:=true
                         else
              begin
                   { crestem cu 1 vectorul t }
                   t[1]:=t[1]+1;
                   i:=1;
                   while t[i]>9 do begin
                         t[i]:=0;
                         t[i+1]:=t[i+1]+1;
                         i:=i+1;
                                end;
                   if i>p then p:=i;
                   { inmultim d cu t }
                   for i:=1 to s do z[i]:=0;
                   for i:=1 to p do
                       for j:=1 to k do
                           z[i+j-1]:=z[i+j-1]+t[i]*d[j];
                   s:=p+k-1;
                   aux:=0;
                   for i:=1 to s do
                       if z[i]>=10 then begin
                          aux:=z[i] div 10;
                          z[i]:=z[i] mod 10;
                          z[i+1]:=z[i+1]+aux;
                                        end
                                   else aux:=0;
                   while aux>0 do begin
                         s:=s+1;
                         z[s]:=aux mod 10;
                         aux:=aux div 10;
                                  end;
              end;
                  end;
     { afisare }
     assign(f,'next.out');rewrite(f);
     for i:=s downto 1 do
         write(f,z[i]);
     close(f);
end.