蒟蒻10分求助
查看原帖
蒟蒻10分求助
655419
maxyzfj楼主2022/7/15 11:57

Code(AC on #2):


#include<bits/stdc++.h>
using namespace std;
const int maxn=5000;
struct bigint{
	int len,a[maxn];
	bigint(int x=0){
		memset(a,0,sizeof(a));
		for(len=1;x;len++){
			a[len]=x%10;
			x/=10;
		}
		len--;
	}
	int &operator[](int i){
		return a[i];
	}
	void jw(int l){
		len=l;
		for(int i=1;i<=len;i++){
			a[i+1]+=a[i]/10;
			a[i]%=10;
		}
		for(;!a[len];){
			len--;
		}
	}
	void print(){
		for(int i=max(len,1);i>=1;i--){
			cout<<a[i];
		}
	}
};
bigint operator*(bigint a,int b){
	bigint c; 
	int len=a.len;
	for(int i=1;i<=len;i++){
		c[i]=a[i]*b;
	}
	c.jw(len+11);
	return c;
}
bigint operator/(bigint a,int b){
	bigint c;
	c.len=a.len;
	for(int i=1;i<=c.len;i++){
		c[i]=a[a.len+1-i];
	}
	int x=0;
	for(int i=1;i<=c.len;i++){
		x=x*10+a[i];
		c[i]=x/b;
		x%=b;
	}
	int st=1;
	bigint d;
	while(c[st]==0&&st<a.len)st++;
	d.len=a.len-st+1;
	for(int i=st;i<=a.len;i++){
		d[i-st+1]=c[i];
	}
	return d;
}
bigint maxx(bigint a,bigint b){
	if(a.len>b.len)return a;
	if(a.len<b.len)return b;
	for(int i=b.len;i>=1;i--){
		if(a[i]>b[i])return a;
		if(a[i]<b[i])return b;
	}
	return a;
}
struct r{
	int a,b;
}s[1010];
bool cmp(r m,r n){
	return m.a*m.b<n.a*n.b;
}
int n;
bigint anss,tt;
int main(){
	anss[1]=1;
	anss.len=1;
	tt[1]=0;
	tt.len=1;
	ios::sync_with_stdio(false);
	cin>>n;
	for(int i=0;i<=n;i++){
		cin>>s[i].a>>s[i].b;
	}
	sort(s+1,s+n+1,cmp);
	for(int i=0;i<n;i++){
		anss=anss*s[i].a;
		tt=maxx(tt,anss/s[i+1].b);
	}
	tt.print();
	return 0;
}
2022/7/15 11:57
加载中...