一道贪心+高精度的题目
可是我还做了这么久
注意的是每次都要判断一下
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; inline int read(){ int x=0,f=1,ch=getchar(); while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();} while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();} return x*f; } struct BigInt{ int a[5005]; int len; void init(){ memset(a,0,sizeof(a));len=0; } int& operator [](int x){ return a[x]; } BigInt operator * (const int b)const{ BigInt c;c.init();c.len=len; for(int i=0;i<len;i++) c[i]=a[i]*b; for(int i=0;i<len;i++){ c[i+1]+=c[i]/10; c[i]%=10; } while(c[c.len]) c[c.len+1]+=c[c.len]/10,c[c.len]%=10,c.len++; return c; } BigInt operator / (const int b)const{ BigInt c;c.init();c.len=len; int ex=0; for(int i=len-1;i>=0;i--){ ex=ex*10+a[i]; // cout<<ex<<"\t"<<b<<endl; c[i]=ex/b; ex%=b; } while(!c[c.len-1]&&c.len>1) c.len--; return c; } void print(){ for(int i=len-1;i>=0;i--) printf("%d",a[i]); puts(""); } }one,ans; inline BigInt max(BigInt a,BigInt b){ if(a.len<b.len) return b; if(a.len>b.len) return a; for(int i=a.len-1;i>=0;i--){ if(a[i]>b[i]) return a; if(a[i]<b[i]) return b; } return a; } int a[1001],b[1001],id[1001]; inline bool cmp(int x,int y){ return a[x]*b[x]<a[y]*b[y]; } int main(){ int n=read();a[0]=read();b[0]=read(); for(int i=1;i<=n;i++) a[i]=read(),b[i]=read(),id[i]=i; sort(id+1,id+1+n,cmp); one[0]=1;one.len=1; // cout<<b[id[1]]<<endl; one=one*a[0];ans=one/b[id[1]]; for(int i=1;i<=n;i++){ ans=max(ans,one/b[id[i]]); // ans.print(); one=one*a[id[i]]; } ans.print(); return 0; }
原文:https://www.cnblogs.com/gcyyzf/p/9692379.html