代码很好理解(懒得用数组,字符串可以cout)
#include<bits/stdc++.h>
using namespace std;
int n;
string k="1",maxs="";
struct man{
int a,b;
} men[1010];
bool cmp(man a,man b){
return a.a*a.b<b.a*b.b;
}
string pro(string a,int b){
int c[110]={0},w=a.length();
for(int i=w-1;i>=0;i--) c[w-i-1]=(a[i]-'0')*b;
for(int i=0;i<w;i++){
c[i+1]+=c[i]/10;
c[i]%=10;
}
while(c[w]){
c[w+1]=c[w]/10;
c[w]%=10;
w++;
}
string cc="";
for(int i=w-1;i>=0;i--) cc+=char(c[i]+'0');
return cc;
}
string qr(string a,int b){
int y=0,k=0;
while(y<b) y=y*10+a[k++]-'0';
string c="";
c+=char(y/b+'0');
y%=b;
for(int i=k;i<a.length();i++){
y=y*10+a[i]-'0';
c+=char(y/b+'0');
y%=b;
}
return c;
}
string mx(string a,string b){
if(a.length()!=b.length()){
if(a.length()>b.length()) return a;
else return b;
}else{
if(a>b) return a;
else return b;
}
}
int main(){
scanf("%d",&n);
for(int i=0;i<=n;i++){
cin>>men[i].a>>men[i].b;
}
sort(men+1,men+n+1,cmp);
for(int i=1;i<=n;i++){
k=pro(k,men[i-1].a);
maxs=mx(maxs,qr(k,men[i].b));
}
cout<<maxs;
return 0;
}