noip2012国王游戏

program tt;
var ans,c,d:array[1..5000]of integer;
    a,b:array[0..1000]of longint;
    t,p,x,i,j,n,lc,ld,lans:longint;
procedure qsort(x,y:longint);
var i,j,mid,t:longint;
begin
 i:=x;j:=y;
 mid:=a[(x+y) div 2]*b[(x+y) div 2];
 repeat
  while a[i]*b[i]<mid do i:=i+1;
  while a[j]*b[j]>mid do j:=j-1;
  if i<=j then
   begin
    t:=a[i];a[i]:=a[j];a[j]:=t;
    t:=b[i];b[i]:=b[j];b[j]:=t;
    i:=i+1;j:=j-1;
   end;
 until i>j;
 if i<y then qsort(i,y);
 if x<j then qsort(x,j);
end;

procedure chu(dd:longint);
var len,k,i:longint;
begin
 len:=lc;k:=0;
 for i:=len downto 1 do
  begin
   k:=k*10000+c[i];
   d[i]:=k div dd;
   k:=k mod dd;
  end;
 while (d[len]=0)and(len>1) do len:=len-1;
 ld:=len;
end;

function compare:boolean;//!!,改为万位同样适用
var i:longint;
begin
 for i:=ld downto 1 do
  begin
   if d[i]>ans[i] then exit(true);
   if d[i]<ans[i] then exit(false);
  end;
 exit(false);
end;
procedure print;//!!万位的输出补0
var i:longint;
begin
 write(ans[lans]);
 for i:=lans-1 downto 1 do
  begin
   if ans[i]<10 then write(0);
   if ans[i]<100 then write(0);
   if ans[i]<1000 then write(0);
   write(ans[i]);
  end;
end;
begin
 read(n);
 read(a[0],b[0]);
 for i:=1 to n do read(a[i],b[i]);
 qsort(1,n);
 while a[0]>0 do
  begin
   lc:=lc+1;
   c[lc]:=a[0] mod 10000;
   a[0]:=a[0] div 10000;
  end;
 for i:=1 to n do
  begin
   chu(b[i]);
   if lans<ld then begin
    lans:=ld;
    ans:=d;
   end
   else
    if lans=ld then
     if compare then ans:=d;
   x:=0;
   for j:=1 to lc do
    begin
     x:=x+c[j]*a[i];
     c[j]:=x mod 10000;
     x:=x div 10000;
    end;
   while x>0 do
    begin
     lc:=lc+1;
     c[lc]:=x mod 10000;
     x:=x div 10000;
    end;
  end;
 print;
 readln;readln;
end.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值