Cod sursa(job #109887)

Utilizator al3csutzuSirbu Alexandru al3csutzu Data 25 noiembrie 2007 12:53:09
Problema Aliens Scor 0
Compilator fpc Status done
Runda preONI 2008, Runda 1, Clasa a 10-a Marime 1.99 kb
program alieni;
var n,i:integer;
a,b,c,sol1,sol2:int64;
x,y,x2t,x3t,x5t,y2t,y3t,y5t,x2aux,x3aux,x5aux,y2aux,y3aux,y5aux:longint;
x2,x3,x5,y2,y3,y5:array[1..50] of integer;
f,g:text;
begin
  assign(f,'aliens.in'); assign(g,'aliens.out');
  reset(f); rewrite(g);
  read(f,n);
  if n=1 then
  begin
  read(F,x,y); writeln(g,x div y);
  end
  else if n=2 then
  begin
  read(f,x,y); read(f,x2t,y2t);
  if x mod y=0 then a:=x div y;
  if x2t mod y2t=0 then b:=x2t div y2t;
  if (x*x2t) mod (y*y2t)=0 then c:=(x*x2t) div (y*y2t);
  if a>=b then begin if a>=c then writeln(g,a) else writeln(g,c) end
          else begin if b>=c then writeln(g,b) else writeln(g,c); end;
  end
  else
  begin
  for i:=1 to n do
  begin
  read(f,x,y);
  while (x mod 2=0) and (x>0) do
  begin
    x:=x div 2;
    x2[i]:=x2[i]+1;
  end;
  while (x mod 3=0) and (x>0) do
  begin
    x:=x div 3;
    x3[i]:=x3[i]+1;
  end;
  while (x mod 5=0) and (x>0) do
  begin
    x:=x div 5;
    x5[i]:=x5[i]+1;
  end;
  while (y mod 2=0) and (y>0) do
  begin
    y:=y div 2;
    y2[i]:=y2[i]+1;
  end;
  while (y mod 3=0) and (y>0) do
  begin
    y:=y div 3;
    y3[i]:=y3[i]+1;
  end;
  while (y mod 5=0) and (y>0) do
  begin
    y:=y div 5;
    y5[i]:=y5[i]+1;
  end;
  x2t:=x2t+x2[i]; x3t:=x3t+x3[i]; x5t:=x5t+x5[i]; y2t:=y2t+y2[i]; y3t:=y3t+y3[i]; y5t:=y5t+y5[i];
  end;
  for i:=1 to n do
  begin
    if (x2[i]>=y2[i]) and (x3[i]>=y3[i]) and (x5[i]>=y5[i]) then
    begin
      x2aux:=x2aux+x2[i]-y2[i]; x3aux:=x3aux+x2[i]-y3[i]; x5aux:=x5aux+x5[i]-y5[i];
    end;
  end;
  x2t:=x2t-y2t; x3t:=x3t-y3t; x5t:=x5t-y5t;
  sol1:=1; sol2:=1;
  if (x2t>0) and (x3t>0) and (x5t>0) then
  begin
  for i:=1 to x2t do sol1:=sol1*2; for i:=1 to x3t do sol1:=sol1*3; for i:=1 to x5t do sol1:=sol1*5;
  end;
  for i:=1 to x2aux do sol2:=sol2*2; for i:=1 to x3aux do sol2:=sol2*3; for i:=1 to x5aux do sol2:=sol2*5;
  if sol2>sol1 then writeln(g,sol2) else writeln(g,sol1);
  end;
  close(f); close(g);
end.