#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
struct bigint
{
int arr[30050],len;
bigint()
{
len=0;
for(int i=1;i<=30049;i++)
{
arr[i]=0;
}
}
bigint(int x)
{
*this=x;
}
bigint operator =(bigint x)
{
len=x.len;
for(int i=1;i<=len;i++)
{
arr[i]=x.arr[i];
}
return *this;
}
bigint operator =(int x)
{
int tmp=x;
len=0;
while(tmp)
{
len++;
tmp/=10;
}
len=max(len,(long long)1);
for(int i=len;i>=1;i--)
{
arr[i]=x%10;
x/=10;
}
return *this;
}
bigint operator +(bigint x)
{
bigint ans;
for(int i=1;i<=max(len,x.len);i++)
{
ans.arr[i]=arr[i]+x.arr[i];
}
for(int i=1;i<=max(len,x.len);i++)
{
ans.arr[i+1]+=ans.arr[i]/10;
ans.arr[i]%=10;
}
ans.len=max(len,x.len);
if(ans.arr[ans.len+1])
{
ans.len++;
}
return ans;
}
bigint operator *(bigint x)
{
bigint ans;
for(int i=1;i<=len+x.len;i++)
{
for(int j=1;j<=x.len;j++)
{
ans.arr[i+j-1]+=arr[i]*x.arr[i];
}
}
for(int i=1;i<=len+x.len;i++)
{
ans.arr[i+1]+=ans.arr[i]/10;
ans.arr[i]%=10;
}
ans.len=len+x.len;
for(int i=len;i>=1 && ans.arr[i]==0;i--)
{
ans.len--;
}
ans.len=max(ans.len,(long long)1);
return ans;
}
bool operator <=(bigint x)
{
if(len>x.len)
{
return 0;
}
if(len<x.len)
{
return 1;
}
for(int i=1;i<=len;i++)
{
if(arr[i]>x.arr[i])
{
return 0;
}
}
return 1;
}
bool operator !=(bigint x)
{
if(len!=x.len)
{
return 0;
}
for(int i=1;i<=len;i++)
{
if(arr[i]!=x.arr[i])
{
return 0;
}
}
return 1;
}
bigint operator /(int x)
{
bigint ret;
bigint tmp;
for(int i=len;i>=1;i--)
{
tmp=tmp*(bigint)10;
tmp=tmp+(bigint)arr[i];
ret=ret*10;
int cnt=0;
for(bigint j=x;j<=tmp && j<=9;j=j+x)
{
cnt++;
}
ret=ret+cnt;
}
return ret;
}
};
struct node
{
int a,b;
int pos;
};
node arr[1050];
bool cmp(node x,node y)
{
if(x.a*x.b!=y.a*y.b)
{
return x.a*x.b<=y.a*y.b;
}
else
{
return x.pos<y.pos;
}
}
bigint ans;
signed main()
{
cin>>n;
int tmp1,tmp2;
cin>>tmp1>>tmp2;
arr[0].a=tmp1,arr[0].b=tmp2;
for(int i=1;i<=n;i++)
{
cin>>tmp1>>tmp2;
arr[i].a=tmp1;
arr[i].b=tmp2;
arr[i].pos=i;
}
sort(arr+1,arr+1+n,cmp);
bigint sum=arr[0].a;
for(int i=1;i<=n;i++)
{
// cout<<arr[i].a<<" "<<arr[i].b<<endl;;
if(ans<=sum/arr[i].b)
{
ans=sum/arr[i].b;
}
sum=sum*arr[i].a;
}
for(int i=1;i<=ans.len;i++)
{
cout<<ans.arr[i];
}
return 0;
}
返回值有问题,求debug