求助,二十分!!
查看原帖
求助,二十分!!
486441
13833925596mm楼主2023/1/21 17:13
#include<bits/stdc++.h>
using namespace std;
struct node{
	int l;
	int r;
	int cj;
	string l2;
}a[1500];
int n,c,b;
int cafa1[100000],cafa2[100000],cafa3[100000];
string cafa(string a,string b){
	memset(cafa3,0,sizeof(cafa3));
	reverse(a.begin(),a.end());
	reverse(b.begin(),b.end());
	for(int i=0;i<=a.size();i++) cafa1[i]=a[i]-'0';
	for(int i=0;i<=b.size();i++) cafa2[i]=b[i]-'0';
	int la=a.size()-1;
	int lb=b.size()-1;
	for(int i=0;i<=la;i++){
		for(int j=0;j<=lb;j++){
			cafa3[i+j]+=(cafa1[i]*cafa2[j]);
			cafa3[i+j+1]+=cafa3[i+j]/10;
			cafa3[i+j]%=10;
		} 
	}              
	string s="";
	int l=la+lb+1;
	if(cafa3[l]==0) l--;
	for(int i=l;i>=0;i--) s+=(cafa3[i]+'0');
	return s;
}
int chfa1[100000],chfa2[100000];
string chfa(string a,long long b){
	string ans="",ans2="";
	int d=0;
	if(a=="0") return 0;
	for(int i=0;i<a.size();i++){
		ans+=(d*10+a[i]-'0')/b+'0';
		d=(d*10+(a[i]-'0'))%b;
	}
	bool flag=false;
	for(int i=0;i<=a.size()-1;i++){
		if(ans[i]!='0') flag=true;
		if(flag) ans2+=ans[i];
	}
	return ans2;
}
bool maxx(string s1,string s2){
	reverse(s1.begin(),s1.end());
	reverse(s2.begin(),s2.end());
	string s3=max(s1,s2);
	return s3==s1;
}
bool cmp(node x,node y){
	return x.cj<y.cj;
}
string str(int x){
	string s="";
	int o;
	while(x!=0){
		o=x%10;
		x/=10;
		s+=(o+'0');
	}
	reverse(s.begin(),s.end());
	return s;
}
int main(){
	cin>>n;
	cin>>c>>b;
	for(int i=1;i<=n;i++){
		cin>>a[i].l>>a[i].r;
		a[i].cj=a[i].l*a[i].r;
		a[i].l2=str(a[i].l);
	}
	sort(a+1,a+1+n,cmp);
	string hand="";
	string cjj=str(c);
	for(int i=1;i<=n;i++){
		string xxxx=chfa(cjj,a[i].r);
		if(!maxx(hand,xxxx)) hand=xxxx;
		cjj=cafa(cjj,a[i].l2);
	}
	cout<<hand;
	return 0;
}
2023/1/21 17:13
加载中...