代码:
#include<bits/stdc++.h>
#include<string>
using namespace std;
const int MAXLEN=200000;
typedef int hp[MAXLEN];
struct ab{
int a,b;
};
void Str2hp(string s,hp &a)
{
int i,len;
memset(a,0,sizeof(a));
len=s.size();
a[0]=len;
for(i=0;i<len;i++) a[len-i]=s[i]-'0';
}
void printg(hp a)
{
int i,len;
len=a[0];
for(i=len;i>=1;i--) cout<<a[i];
}
void hp_to_hp(hp a,hp& b)
{
int i,len;
len=a[0];
b[0]=a[0];
for(i=len;i>=1;i--) b[i]=a[i];
}
void compare(hp& a,hp b)
{
int i;
if(a[0]<b[0]) return;
if(a[0]>b[0])
{
hp_to_hp(b,a);
return;
}
for(i=1;i<=sizeof(a);i++)
{
if(a[i]>b[i]) hp_to_hp(b,a);
return;
}
return;
}
void mult(hp a,int b,hp &c){
hp d;
int i,len,t;
memset(d,0,sizeof(d));
len=a[0];
for(i=1;i<=len;i++) d[i]=a[i]*b;
for(i=1;i<=len;i++)
{
d[i+1]+=d[i]/10;
d[i]%=10;
}
len++;
while(d[len])
{
d[len+1]=d[len]/10;
d[len]%=10;
len++;
}
while(d[len]==0&&len>1) len--;
d[0]=len;
memcpy(c,d,sizeof(d));
}
void divi(hp a,int b,hp &c,int &r)
{
hp d;
int i,len;
memset(d,0,sizeof(d));
r=0;
len=a[0];
for(i=len;i>=1;i--)
{
r=r*10+a[i];
d[i]=r/b;
r%=b;
}
while (len>1 && d[len]==0) len--;
d[0]=len;
memcpy(c,d,sizeof(d));
}
int main()
{
int j,i,n,r;
ab a[1001],t;
string x,y;
hp ans,sum,max;sum[0]=1;sum[1]=1;max[0]=1;max[1]=1;
scanf("%d",&n);
for(i=0;i<=n;i++) scanf("%d%d",&a[i].a,&a[i].b);
for(i=1;i<=n;i++)
{
for(j=i;j<n;j++)
{
if(a[j].a*a[j].b>a[j+1].a*a[j+1].b)
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
for(i=1;i<=n;i++)
{
mult(sum,a[i-1].a,sum);
divi(sum,a[i].b,ans,r);
compare(max,ans);
}
printg(max);
return 0;
}