这次是大的非高精版本,有空再把高精版填上吧(虽然可能再也没空了)
证明过程写代码里了qwq
#include<algorithm> #include<iostream> #include<cstring> #include<cstdio> using namespace std; typedef unsigned long long ull; int n; struct in { ull a,b,c; }ter[1010]; ull s,ans; bool cmp(in a,in b) { return a.c<b.c; } /*设a2放后应始终更优 ans=min(max(s/b1,s*a1/b2),max(s/b2,s*a2/b1))=min(s*a1/b2,s*a2/b1) if(s*a1/b2<s*a2/b1) a1*b1<a2*b2 else a1*b1>a2*b2 因此我们应该保证a1*b1<a2*b2 */ int main() { scanf("%d",&n); for(int i=0;i<=n;i++) cin>>ter[i].a>>ter[i].b,ter[i].c=ter[i].a*ter[i].b; sort(ter+1,ter+1+n,cmp); s=ter[0].a; for(int i=1;i<=n;i++) ans=max(ans,s/ter[i].b),s*=ter[i].a; cout<<ans; }