#include<iostream> //#include<fstream> #include<algorithm> using namespace std; const int N(1005),M(5005); struct node{ int left,right,c; bool operator < (node x)const { return c<x.c; } }; node dachen[N]; int a[M]={0},b[M]={0},gold[M]={0};//a数组存累乘,b数组存金币数,gold数组保存最多金币数 //ifstream cin("game.in"); //ofstream cout("game.out"); void chen(int a[],int x) //高精度乘以低精度 { for (int i=1;i<=a[0];i++) a[i]*=x; for (int i=1;i<=a[0];i++) a[i+1]+=a[i]/10,a[i]%=10; while (a[a[0]+1]) a[0]++,a[a[0]+1]=a[a[0]]/10,a[a[0]]%=10; } void div(int a[],int x) //高精度除以低精度 { int d(0); for (int i=a[0];i>0;i--) { d=d*10+a[i]; b[i]=d/x; d%=x; } b[0]=a[0]; while (b[0]>1&&b[b[0]]==0) b[0]--; } bool bigger(int a[],int b[]) //高精度比较大小 { if (a[0]!=b[0]) return a[0]>b[0]; for (int i=a[0];i>0;i--) if (a[i]!=b[i]) return a[i]>b[i]; return false; } void solve(int n) { gold[0]=1; //gold数组初始化为0 a[0]=1; a[1]=1; //累乘数组初始化为1 chen(a,dachen[0].left); for (int i=1;i<n;i++) { div(a,dachen[i].right); if (bigger(b,gold)) //copy(b,b+b[0]+1,gold); for (int j=0;j<=b[0];j++) gold[j]=b[j]; chen(a,dachen[i].left); } } int main() { int n; cin>>n; for (int i=0;i<=n;i++) { cin>>dachen[i].left>>dachen[i].right; dachen[i].c=dachen[i].left * dachen[i].right; } n++; sort(dachen+1,dachen+n); solve(n); for (int i=gold[0];i>0;i--) cout<<gold[i]; cout<<endl; return 0; } /************************************************************** Problem: 2315 User: admin Language: C++ Result: Accepted Time:110 ms Memory:2148 kb ****************************************************************/