1 条题解
-
0
水!
#include<bits/stdc++.h> using namespace std; const int maxn=1010; const int maxm=1000000; struct node { int a,b; }p[maxn]; int t[maxm]; int d[maxm]; int ans[maxm]; int n; bool Comp(node x,node y) { return x.a*x.b<y.a*y.b; } void Times(int *X,int v,int *Y) { int len=X[0]; for (int i=1; i<=len+20; i++) Y[i]=0; for (int i=1; i<=len; i++) { Y[i]+=(X[i]*v); Y[i+1]+=(Y[i]/10); Y[i]%=10; } while (Y[len+1]>0) { len++; Y[len+1]+=(Y[len]/10); Y[len]%=10; } Y[0]=len; } void Div(int *X,int v,int *Y) { int len=X[0]; int rest=0; for (int i=len; i>=1; i--) { rest=rest*10+X[i]; Y[i]=rest/v; rest-=(v*Y[i]); } while (!Y[len]) len--; if (!len) len=1; Y[0]=len; } void Get_max(int *X,int *Y) { if (Y[0]<X[0]) return; if (Y[0]==X[0]) { for (int i=Y[0]; i>=1; i--) { if (Y[i]<X[i]) return; else if (Y[i]>X[i]) break; } } for (int i=0; i<=Y[0]; i++) X[i]=Y[i]; } int main() { scanf("%d",&n); for (int i=0; i<=n; i++) scanf("%d%d",&p[i].a,&p[i].b); sort(p+1,p+n+1,Comp); t[0]=1; t[1]=1; for (int i=1; i<=n; i++) { Times(t,p[i-1].a,d); for (int j=0; j<=d[0]; j++) t[j]=d[j]; Div(t,p[i].b,d); Get_max(ans,d); } for (int i=ans[0]; i>=1; i--) { printf("%d",ans[i]); } return 0; }
- 1
信息
- ID
- 309
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者