```
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
int n;//n个大臣
struct node{
int l,r;
};
node p[1005];
bool cmp(node i,node j){
return max(j.r,i.l*i.r)<max(i.r,j.l*j.r);
}
int s[4005],t[4005],ans[4005];//s 积 t 商 ans 最大值
int Len=4005;//表示字符数组的长度
void cheng(int d){//高精度乘 int 存到s
for(int i=1;i<=Len;i++) s[i]*=d;
for(int i=1;i<=Len;i++){
s[i+1]+=s[i]/10;//向前进位
s[i]=s[i]%10; //保留个位
}
}
void chu(int d){//高精度除 整数
memset(t,0,sizeof(t));
int r=0;
for(int i=Len;i>=1;i--){
r=r*10+s[i];
t[i]=r/d;
r=r%d;
}
}
bool f(){//高精度比较 t[] ans[]
for(int i=Len;i>=1;i--){
if(t[i]>ans[i]) return true;
if(t[i]<ans[i]) return false;
}
return false;
}
void cpy(){//高精度赋值 把t[]赋值给ans[]
for(int i=1;i<=Len;i++) ans[i]=t[i];
}
void print(){//高精度输出 ans[]
//去前导0
while(ans[Len]==0&&Len>1) Len--;
for(int i=Len;i>=1;i--) cout<<ans[i];
}
int main(){
cin>>n;
for(int i=0;i<=n;i++) cin>>p[i].l>>p[i].r;
sort(p+1,p+n+1,cmp);
s[1]=1;
for(int i=1;i<=n;i++){
cheng(p[i-1].l);//高精度乘 s[]
chu(p[i].r);//高精度除 t[]
if(f()) cpy();//高精度比较 高精度赋值
}
print();//高精度输出
return 0;
}
```
by xuzihan1 @ 2024-05-13 08:54:44