90分#6玄关求助~
查看原帖
90分#6玄关求助~
526026
qingquan楼主2023/9/26 20:42

求助

高精度没问题 算法不知道哪里错了

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10,SYS=10;
struct BigNum {
	vector<int>val;
	BigNum() {
		val.push_back(0);
	}
	BigNum(string num) {
		for(int i=num.size()-1;i>=0;i--)val.push_back(num[i]-'0');
		while(!val.empty()&&val[val.size()-1]==0)val.pop_back(); 
	}
	// *
	BigNum operator*(const BigNum &x)const {
		BigNum res;
		res.val=vector<int>(val.size()+x.val.size());
		for(int i=0;i<val.size();i++) {
			for(int j=0;j<x.val.size();j++) {
				res.val[i+j]+=val[i]*x.val[j]%SYS;
				res.val[i+j+1]+=res.val[i+j]/SYS+val[i]*x.val[j]/SYS;
				res.val[i+j]%=SYS;
			}
		}
		if(res.val.size()>0&&res.val.back()==0)res.val.pop_back();
		return res;
	}
	// /
	BigNum operator/(const int &x)const {
		BigNum res;
		res.val.pop_back();
		int r=0;
		for(int i=val.size()-1;i>=0;i--) {
			r=r*SYS+val[i];
			res.val.push_back(r/x);
			r%=x;
		}
		reverse(res.val.begin(),res.val.end());
		while(res.val.size()>1&&res.val.back()==0)res.val.pop_back();
		return res;
	}
	// <
	bool operator<(const BigNum &x)const {
		if(val.size()!=x.val.size()) {
			return val.size()<x.val.size();
		}
		for(int i=val.size()-1;i>=0;i--) {
			if(val[i]!=x.val[i])return val[i]<x.val[i];
		}
	}
	// >
	bool operator>(const BigNum &x)const {
		if(val.size()!=x.val.size()) {
			return val.size()>x.val.size();
		}
		for(int i=0;i<val.size();i++) {
			if(val[i]!=x.val[i])return val[i]>x.val[i];
		}
	}
	
	void print() {
		for(int i=val.size()-1;i>=0;i--)cout<<val[i];
	}
	
	int to_int() {
		int res=0;
		int base=1;
		for(int i=0;i<val.size();i++) {
			res+=val[i]*base;
			base*=SYS;
		}
		return res;
	}
};
BigNum L[N],R[N],Pr;
struct Person{
	BigNum V;
	int order;
};
bool operator<(Person x,Person y) {
		return x.V<y.V;
}
Person P[N];
int n;
BigNum max(BigNum x,BigNum y);
int main() {
	cin>>n;
	string a,b;
	cin>>a>>b;
	BigNum u(a),v(b);
	L[0]=u,R[0]=v;
	for(int i=1;i<=n;i++) {
		cin>>a>>b;
		BigNum u(a),v(b);
		L[i]=u,R[i]=v;
		P[i].V=(L[i]*R[i]);
		P[i].order=i;
	}
	sort(P+1,P+n+1);
	BigNum ans;
	Pr=L[0];
	for(int i=1;i<=n;i++) {
		BigNum p("1");
		p=Pr/R[P[i].order].to_int();
		Pr=Pr*L[P[i].order];
		ans=max(ans,p);
	}
	ans.print();
	return 0;
}
BigNum max(BigNum x,BigNum y) {
	return x>y?x:y;
}

悬关

2023/9/26 20:42
加载中...