求助
高精度没问题 算法不知道哪里错了
#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;
}
悬关