10分求调,没过样例
查看原帖
10分求调,没过样例
1270559
zkhehe楼主2025/7/28 16:49
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n;
int cnt[5005];
int j[5005];
int tcnt[5005];
struct m{
	int a,b;
}t[1005];
int cmp(m x,m y){
	return x.a*x.b<y.a*y.b||(x.a*x.b==y.a*y.b&&x.a>y.a);
}
signed main(){
	cin>>n;
	int l,r;
	cin>>l>>r;
	for(int i=1;i<=n;i++){
		scanf("%lld%lld",&t[i].a,&t[i].b); 
	}
	sort(t+1,t+1+n,cmp);
	for(int i=1;l;i++){
		j[i]=l%10;
		l/=10;
		j[0]=i;
	}
	for(int i=1;i<=n;i++){
		memset(tcnt,0,sizeof tcnt);
		int x=0;
		for(int k=j[0];k>=1;k--){
			tcnt[k]=(j[k]+x*10)/t[i].b;
			x=(j[k]+x*10)%t[i].b;
			if(tcnt[k])tcnt[0]=max(tcnt[0],k);
		}
		if(tcnt[0]>cnt[0]){
			for(int k=0;k<=tcnt[0];k++)cnt[k]=tcnt[k];
		}
		if(tcnt[0]==cnt[0]){
			bool f=0;
			for(int k=cnt[0];k>=1;k--){
				if(cnt[k]<tcnt[k]){
					f=1;
					break;
				}
			}
			if(f)
			for(int k=0;k<=tcnt[0];k++)cnt[k]=tcnt[k];
		}
		for(int i=1;i<=j[0];i++){
			j[i]*=t[i].a;
		}
		int ta=t[i].a,l=1;
		while(ta/10)
		{
			l++;
			ta/=10;
		}
		j[0]+=l;
		for(int i=1;i<=j[0];i++){
			j[i+1]+=(j[i]/10);
			j[i]%=10;
		}
		if(j[j[0]+1])j[0]++;
		
		
	}
	if(cnt[0]==0)printf("0");
	for(int i=cnt[0];i>=1;i--){
		printf("%lld",cnt[i]);
	}
	return 0;
}

2025/7/28 16:49
加载中...