rt
WA on #5 #7 #8 #9
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,b,base=10;
pair<ll,ll>p[10003];
string a;
bool cmp(pair<ll,ll>x,pair<ll,ll>y){
return x.first*x.second<y.second*y.first;
}
struct bignum{//only mul ,comp ans so on
int a[100005],len;
bignum() {//初始化
memset(a,0,sizeof(a));
len = 1;
}
void resize(){//限制位数
len = 100005;
for(int i = len - 1;i >= 0;i--)
if( a[i] > 0 ) {
len = i + 1;
return;
}
len = 1;
}
bool operator < (const bignum &b) const{//比大小
if ( len != b.len) return len < b.len;
for(int i = len - 1 ;i >= 0 ;i--){
if(a[i] != b.a[i]) return a[i] < b.a[i];
}
return 0;
}
bignum operator * (const int &b) const{ //乘法(高精乘int)
bignum c;
for(int i = 0; i < len ;i++){
c.a[i] += a[i] * b;
if( c.a[i] >= base) {
c.a[i+1] += c.a[i]/base;
c.a[i] %= base;
}
}
c.resize();
return c;
}
bignum operator / (const int &b) const{//除法(高精除int)
ll temp = 0;
bignum c;
if( b == 0) {
printf("Error!");
return c;
}
for(int i = len -1;i >= 0;i--){
temp = temp * base + a[i];
if(temp >= b) {
c.a[i] = temp / b;
temp %= b;
}
}
c.resize();
return c;
}
void print (){//输出
resize();
printf("%d",a[len-1]);
if ( len > 1)
for(int i = len - 2;i >=0;i--){
printf("%d",a[i]);
}
return;
}
}res,mx;
int main(){
res.a[0]=1;
cin>>n;
for(int i=0;i<=n;i++) cin>>p[i].first>>p[i].second;
sort(p+1,p+1+n,cmp);
for(int i=0;i<n;i++){
if(mx<res/p[i].second){
mx=res/p[i].second;
}
res=res*p[i].first;
}
if(mx<res/p[n].second){
mx=res/p[n].second;
}
mx.print();
}