在线ide显示terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=2e4+10;
int n,div1[N],divans[N];
struct Node{
int x,y;
}a[N];
bool cmp(Node x1,Node y1){return x1.x*x1.y<y1.x*y1.y;}
string multi(string x1,string x2){
reverse(x1.begin(),x1.end());
reverse(x2.begin(),x2.end());
int l1=x1.size(),l2=x2.size();
memset(div1,0,sizeof(div1));
for(int i=0;i<l1;i++)
for(int j=0;j<l2;j++) div1[i+j]+=(x1[i]-'0')*(x2[j]-'0');
for(int i=0;i<l1+l2;i++)
if(div1[i]>=10){div1[i+1]+=div1[i]/10;div1[i]%=10;}
string ans="";
bool flag=false;
for(int i=l1+l2-1;i>=0;i--){
if(div1[i]==0&&!flag) continue;
else{
ans+=(div1[i]+'0');
flag=true;
}
}
return ans;
}
string get_div(string s1,int num){
memset(div1,0,sizeof(div1));
memset(divans,0,sizeof(divans));
int len=s1.size();
for(int i=0;i<len;i++) div1[i+1]=s1[i]-'0';
int now=0,slen=1;
for(int i=1;i<=len;i++){
int k=now*10+div1[i];
divans[i]=k/num;
now=k%num;
}
while(divans[slen]=='0'&&slen<=len) slen++;
string res="";
for(int i=slen;i<=len;i++) res+=divans[i]+'0';
return res;
}
string mx(string x1,string y1){
int l1=x1.size(),l2=y1.size();
return l1==l2?(x1>y1?x1:y1):(l1>l2?x1:y1);
}
string cstr(int num){
string str="";
while(num){
str+=char(num%10+'0');
num/=10;
}
reverse(str.begin(),str.end());
}
int main(){
scanf("%d",&n);
for(int i=0;i<=n;i++)
scanf("%d%d",&a[i].x,&a[i].y);
sort(a+1,a+n+1,cmp);
string ans="0",mul=cstr(a[0].x);
for(int i=1;i<=n;i++){
ans=mx(ans,get_div(mul,a[i].y));
mul=multi(mul,cstr(a[i].x));
}
cout<<ans;
return 0;
}