Cod sursa(job #467844)

Utilizator lianaliana tucar liana Data 30 iunie 2010 22:26:38
Problema Prod Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.02 kb
program proda;
type numar=array[0..1000] of longint;
var f, g:text;
    i, j, mmic, pozc, t, k:longint;
    v:array[0..9] of longint;
    nr:array[1..2] of numar;
    c, rez:numar;

procedure afisare;
  begin
{    for i:=1 to nr[1,0] do
      write(g,nr[1,i]);
    writeln(g);
    for i:=1 to nr[2,0] do
      write(g,nr[2,i]);
    writeln(g);}
    for i:=rez[0] downto 1 do
      write(g,rez[i]);
    writeln(g);
  end;

function prod(a,b:numar):numar;
  begin
    for i:=1 to a[0] do
      for j:=1 to b[0] do
        c[i+j-1]:=c[i+j-1]+a[i]*b[j];
    t:=0;
    c[0]:=a[0]+b[0]-1;
    for i:=1 to c[0] do
      begin
        k:=c[i]+t;
        c[i]:=k mod 10;
        t:=k div 10;
      end;
    while t>0 do
      begin
        c[0]:=c[0]+1;
        c[c[0]]:=t mod 10;
        t:=t div 10;
      end;
    prod:=c;
  end;

function inv(a:numar):numar;
var aux:longint;
  begin
    for i:=1 to a[0] div 2 do
      begin
        aux:=a[i];
        a[i]:=a[a[0]-i+1];
        a[a[0]-i+1]:=aux;
      end;
    inv:=a;
  end;

  begin
    assign(f,'prod.in'); reset(f);
    assign(g,'prod.out'); rewrite(g);
    for i:=1 to 9 do
      read(f,v[i]);
    mmic:=1;
    pozc:=-1;
    for i:=9 downto 1 do
      begin
        for j:=1 to v[i] do
          begin
            nr[mmic,0]:=nr[mmic,0]+1;
            nr[mmic,nr[mmic,0]]:=i;
            if nr[mmic,0]>nr[3-mmic,0] then
              mmic:=3-mmic
             else
               if nr[mmic,0]=nr[3-mmic,0] then
                 begin
                   if pozc=-1 then
                     if nr[mmic,nr[mmic,0]]<nr[3-mmic,nr[3-mmic,0]] then
                       pozc:=mmic
                      else
                       if nr[mmic,nr[mmic,0]]>nr[3-mmic,nr[3-mmic,0]] then
                         pozc:=3-mmic;
                   if pozc<>-1 then
                     mmic:=pozc;
                 end;
          end;
      end;
    rez:=prod(inv(nr[1]),inv(nr[2]));
    afisare;
    close(f);
    close(g);
  end.
{}