1 条题解
-
0
C++ :
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n,a,b; struct _{int a,b;}__[10003]; bool pp(_ a,_ b){return a.b*a.a<b.b*b.a;}; struct big{ int n; int a[16003]; void operator*=(int b){ for(int i=0;i<n;++i) a[i]*=b; for(int i=0;i<n;++i) if(a[i]>9){ a[i+1]+=a[i]/10; a[i]%=10; } while(a[n]>9){ a[n+1]=a[n]/10; a[n]%=10; ++n; } if(a[n])++n; } bool operator>(big b){ if(n!=b.n) return n>b.n?1:0; for(int i=n-1;i>=0;++i) if(a[i]!=b.a[i]) return a[i]>b.a[i]?1:0; return 0; } big operator/(int b){ bool flag=0; big res; memset(res.a,0,sizeof res.a); res.n=0; int now=0; for(int i=n-1;i>=0;--i){ now=now*10+a[i]; if(now>=b){ if(!flag) res.n=i+1,flag=1; res.a[i]=now/b; now%=b; } } return res; } }now,ans; int main(){ scanf("%d%d%d",&n,&a,&b); for(int i=0;i<n;++i) scanf("%d%d",&__[i].a,&__[i].b); sort(__,__+n,pp); while(a){ now.a[now.n++]=a%10; a/=10; } for(int i=0;i<n;++i){ big stay=now/__[i].b; ans=ans>stay?ans:stay; now*=__[i].a; } for(int i=ans.n-1;i>=0;--i) printf("%d",ans.a[i]); return 0; }
- 1
信息
- ID
- 1821
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者