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.
noip2012国王游戏
最新推荐文章于 2023-10-01 15:07:15 发布