NOIP2012国王游戏

一交A,TAT

program game;

Type
 gjd=record
   len:longint;
   d:array[0..2000] of longint;
 end;
 
Var
 n,i:longint;
 a,b:array[0..10002] of longint;
 now,max,q:gjd;

Procedure fopen;
  begin
  assign(input,'game.in');
  assign(output,'game.out');
  reset(input);
  rewrite(output);
end;

Procedure fclose;
  begin
  close(input);
  close(output);
end;

Procedure swap(var p,q:longint);
var
 y:longint;
  begin
  y:=p;
  p:=q;
  q:=y;
end;

Procedure qsort(l,r:longint);
var
 i,j,x:longint;
  begin
  i:=l;j:=r;x:=a[(l+r) div 2]*b[(l+r) div 2];
    repeat
    while a[i]*b[i]<x do inc(i);
    while a[j]*b[j]>x do dec(j);
    if i<=j then
      begin
      swap(a[i],a[j]);
      swap(b[i],b[j]);
      inc(i);
      dec(j);
    end;
  until i>j;
  if l<j then qsort(l,j);
  if i<r then qsort(i,r);
end;

Procedure print(P:gjd);
var
 i:longint;
  begin
  for i:=p.len downto 1 do
    begin
    if i<>p.len then
      begin
      if p.d[i]<10 then write(0);
      if p.d[i]<100 then write(0);
      if p.d[i]<1000 then write(0);
    end;
    write(p.d[i]);
  end;
end;

Function more(p,q:gjd):boolean;
var
 i:longint;
  begin
  if p.len>q.len then exit(true);
  for i:=p.len downto 1 do
    begin
    if p.d[i]>q.d[i] then exit(true);
    if p.d[i]<q.d[i] then exit(false);
  end;
  exit(false);
end;

Function cheng(p:gjd;q:longint):gjd;
var
 i,jw:longint;
  begin
  cheng:=p;
  jw:=0;
  for i:=1 to cheng.len do
    begin
    cheng.d[i]:=cheng.d[i]*q+jw;
    jw:=cheng.d[i] div 10000;
    cheng.d[i]:=cheng.d[i] mod 10000;
  end;
  while jw>0 do
    begin
    inc(cheng.len);
    cheng.d[cheng.len]:=jw;
    jw:=cheng.d[cheng.len] div 10000;
    cheng.d[cheng.len]:=cheng.d[cheng.len] mod 10000;
  end;
  while (cheng.len>1) and (cheng.d[cheng.len]=0) do dec(cheng.len);
end;

Function divide(P:gjd;q:longint):gjd;
var
 ans:gjd;
 i,jw:longint;
  begin
  ans:=p;
  jw:=0;
  for i:=ans.len downto 1 do
    begin
    ans.d[i]:=(ans.d[i]+jw*10000) div q;
    jw:=(p.d[i]+jw*10000)-ans.d[i]*q;
  end;
  while (ans.len>1) and (ans.d[ans.len]=0) do dec(ans.len);
  exit(ans);
end;


  begin
  fopen;
  readln(n);
  for i:=0 to n do
    readln(a[i],b[i]);
  qsort(1,n);
  now.len:=1;
  now.d[1]:=a[0];
  max.len:=1;
  max.d[1]:=0;
  for i:=1 to n do
    begin
    q:=divide(now,b[i]);
    if more(q,max) then max:=q;
    now:=cheng(now,a[i]);
  end;
  print(max);
  fclose;
end.
原文地址:https://www.cnblogs.com/htfy/p/2781576.html