请教一个有点玄学的问题?
查看原帖
请教一个有点玄学的问题?
803885
_8008008楼主2023/8/10 16:22
#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
int _mul(int a,string b){
	return a*stoi(b);
}
int _div(int a,int b){
	return a/b;
}
int _max(int a,int b){
	return max(a,b);
}
struct z{
	int l,r;
};
bool cmp(z a,z b){
	return a.l*a.r<b.l*b.r;
}
int n,l,r,sum,ans=0;z a[100000];
signed main(){
	cin>>n>>l>>r;
	for(int i=0;i<n;i++)cin>>a[i].l>>a[i].r;
	sort(a,a+n,cmp);
	sum=l;
	for(int i=0;i<n;i++){
		ans=_max(ans,(_div(sum,a[i].r)));
		sum=_mul(sum,to_string(a[i].l));
	}
	cout<<ans;
	return 0;
}
#include<iostream>
#include<string>
#include<algorithm>
#define int long long
using namespace std;
string _mul(string a1,string b1){
	int a[10001],b[10001],c[10001];
	int lena=a1.size();
	int lenb=b1.size();
	int lenc=lena+lenb;
	for(int i=0;i<lena;i++){
		a[i]=a1[lena-i-1]-'0';
	}
	for(int i=0;i<lenb;i++){
		b[lenb-i-1]=b1[i]-'0';
	}
	for(int i=0;i<lena;i++){
		for(int j=0;j<lenb;j++)
		{
			c[i+j]+=a[i]*b[j];
			if(c[i+j]>=10)
			{
				c[i+j+1]+=c[i+j]/10;
				c[i+j]%=10;
			}
		}
	}
	while(lenc>1&&c[lenc-1]==0){
		lenc--;
	}
	string s;
	for(int i=lenc-1;i>=0;i--){
		s+=c[i]+'0';
	}
	return s;
}
string _div(string a1,int b){
	int a[10001],c[10001];
	int lena=a1.size();
	for(int i=0;i<lena;i++){
		a[i]=a1[i]-'0';
	}
	long long r=0,cnt=0;
	for(int i=0;i<lena;i++){
		r=r*10+a[i];
		cnt++;
		c[cnt]=0;
		if(r>=b)
		{
			c[cnt]=r/b;
			r%=b;
		}
	}
	int i=0;
	while(c[i]==0&&(cnt-i)>0){
		i++;
	}
	string s;
	for(;i<=cnt;i++){
		s+=c[i]+'0';
	}
	return s;
}
string _max(string a,string b){
	if(a.length()<b.length())return b;
	if(a.length()>b.length())return a;
	for(int i=0;i<a.length();i++)if(a[i]-'0'<b[i]-'0')return b;else if(a[i]-'0'>b[i]-'0')return a;
	return a; 
} 
struct z{
	int l,r;
};
bool cmp(z a,z b){
	return a.l*a.r<b.l*b.r;
}
long long n;string l,r,sum,ans="0";z a[100000];
signed main(){
	cin>>n>>l>>r;
	for(int i=0;i<n;i++)cin>>a[i].l>>a[i].r;
	sort(a,a+n,cmp);
	sum=l;
	for(int i=0;i<n;i++){
		ans=_max(ans,(_div(sum,a[i].r)));
		sum=_mul(sum,to_string(a[i].l));
	}
	cout<<ans;
	return 0;
}

高精函数我测试的是没问题的 这代码都快一模一样了,前面那个低精度60 后面那个只过了subject2

2023/8/10 16:22
加载中...