在90和100徘徊,求助!
查看原帖
在90和100徘徊,求助!
920354
jyj6222楼主2024/7/30 10:56

这是一百分,但是最后一个附加测试点没过的程序

#include<iostream>
#include<algorithm>
#include<cstring> 
using namespace std;
typedef long long ll;
int n;
string aa,bb,num;
struct st{
	string a,b;
}s[100100];
int xxx[10010],yyy,xxxyyy[100010];
string chu(string x,string y){
	yyy=0;
	memset(xxxyyy,0,sizeof xxxyyy);
	
	for(int i=0;i<x.size();i++) xxx[i+1]=x[i]-'0';
	for(int i=0;i<y.size();i++){
		yyy+=y[i]-'0';
		yyy*=10;
	}
	yyy/=10;
	//cout<<yyy<<endl;
	for(int i=1;i<=x.size();i++){
		xxxyyy[i]=xxx[i]/yyy;
		xxx[i+1]+=10*(xxx[i]%yyy);
	}
	int i=0;
	while(xxxyyy[i]==0 && i<x.size()) i++; 
	string g="";
	for(;i<=x.size();i++) g+=xxxyyy[i]+'0';
	return g;
}
int xx[10010],yy[10010],xxyy[100010];
string cheng(string x,string y){
	memset(xxyy,0,sizeof xxyy);
	for(int i=0;i<x.size();i++) xx[x.size()-i]=x[i]-'0';
	for(int i=0;i<y.size();i++) yy[y.size()-i]=y[i]-'0';
	
	for(int i=1;i<=x.size();i++){
		for(int j=1;j<=y.size();j++){
			xxyy[i+j-1]+=xx[i]*yy[j]; 
		}
	}
	int len=x.size()+y.size();
	for(int i=1;i<len;i++){
		if(xxyy[i]>=10){
			xxyy[i+1]+=xxyy[i]/10;
			xxyy[i]%=10;
		}
	}
	while(xxyy[len]==0 && len>1) len--;
	string g="";
	for(int i=len;i>=1;i--) g+=xxyy[i]+'0';
	return g;
}
bool check(st x,st y){
	string xxx=cheng(x.a,x.b),yyy=cheng(y.a,y.b);
	if(xxx.size()==yyy.size()) return xxx<yyy;
	return xxx.size()<yyy.size();
}
bool cmp(st c,st d){
	return check(c,d);
}
int main(){
//	cout<<cheng("10230","3000");
	cin>>n;
	string x,y;
	cin>>x>>y;
	for(int i=1;i<=n;i++){
		cin>>s[i].a>>s[i].b;
	}
	sort(s+1,s+1+n,cmp);
//	cout<<endl;
//	for(int i=1;i<=n;i++){
//		cout<<s[i].a<<" "<<s[i].b<<endl;
//	}
//	
	num=x;
	string d="";
	for(int i=1;i<n;i++){
		num=cheng(num,s[i].a);
	}
	d=chu(num,s[n].b);
	if(d.size()==1){
		int l=d[0]-'0';
		if(l<1){
			cout<<1;
		return 0;
		}
	}
	cout<<d;
}

这是九十分但第十个测试点没过的程序

#include<iostream>
#include<algorithm>
#include<cstring> 
using namespace std;
typedef long long ll;
int n;
string aa,bb,num;
struct st{
	string a,b;
}s[100100];
int xxx[10010],yyy,xxxyyy[100010];
string chu(string x,string y){
	yyy=0;
	memset(xxxyyy,0,sizeof xxxyyy);
	
	for(int i=0;i<x.size();i++) xxx[i+1]=x[i]-'0';
	for(int i=0;i<y.size();i++){
		yyy+=y[i]-'0';
		yyy*=10;
	}
	yyy/=10;
	//cout<<yyy<<endl;
	for(int i=1;i<=x.size();i++){
		xxxyyy[i]=xxx[i]/yyy;
		xxx[i+1]+=10*(xxx[i]%yyy);
	}
	int i=0;
	while(xxxyyy[i]==0 && i<x.size()) i++; 
	string g="";
	for(;i<=x.size();i++) g+=xxxyyy[i]+'0';
	return g;
}
int xx[10010],yy[10010],xxyy[100010];
string cheng(string x,string y){
	memset(xxyy,0,sizeof xxyy);
	for(int i=0;i<x.size();i++) xx[x.size()-i]=x[i]-'0';
	for(int i=0;i<y.size();i++) yy[y.size()-i]=y[i]-'0';
	
	for(int i=1;i<=x.size();i++){
		for(int j=1;j<=y.size();j++){
			xxyy[i+j-1]+=xx[i]*yy[j]; 
		}
	}
	int len=x.size()+y.size();
	for(int i=1;i<len;i++){
		if(xxyy[i]>=10){
			xxyy[i+1]+=xxyy[i]/10;
			xxyy[i]%=10;
		}
	}
	while(xxyy[len]==0 && len>1) len--;
	string g="";
	for(int i=len;i>=1;i--) g+=xxyy[i]+'0';
	return g;
}
bool check(st x,st y){
	string xxx=cheng(x.a,x.b),yyy=cheng(y.a,y.b);
	if(xxx.size()==yyy.size()) return xxx<yyy;
	return xxx.size()<yyy.size();
}
bool cmp(st c,st d){
	return check(c,d);
}
int main(){
//	cout<<cheng("10230","3000");
	cin>>n;
	string x,y;
	cin>>x>>y;
	for(int i=1;i<=n;i++){
		cin>>s[i].a>>s[i].b;
	}
	sort(s+1,s+1+n,cmp);
//	cout<<endl;
//	for(int i=1;i<=n;i++){
//		cout<<s[i].a<<" "<<s[i].b<<endl;
//	}
//	
	num=x;
	string d="";
	for(int i=1;i<n;i++){
		//cout<<num<<" "<<s[i].b<<endl;
		//cout<<d<<endl;
		num=cheng(num,s[i].a);
	}
	d=chu(num,s[n].b);
	cout<<d;
}

求助!

2024/7/30 10:56
加载中...