10pts求调仅AC#10
查看原帖
10pts求调仅AC#10
593499
LateSight楼主2024/3/13 17:26
#include<bits/stdc++.h>
using namespace std;
long long n,lm,ld,la,tt,len;
int m[20010],d[20010],ans[20010],sw[6];
struct node{
	int l,r;
}a[10010];

bool cmp(node a,node b){//排序函数
	if(a.l*a.r==b.l*b.r) return a.r<b.r;
	else return a.l*a.r<b.l*b.r; 
}

void csh(){//初始化
	memset(m,0,sizeof m);
	memset(d,0,sizeof d);
	lm=1,ld=0;
	m[1]=1; 
}

void multiply(int x){//高精乘 
	tt=x;
	int jw=0;
	for(int j=1;j<=lm;j++){
		m[j]=m[j]*tt+jw;
		jw=m[j]/10;
		m[j]%=10;
		while(m[lm+1]) lm++;
	}
}

void divide(int x){//高精除 
	int y=0;
	ld=lm;
	for(int i=lm;i>0;i--) d[i]=(y*10+m[i])/x,y=(y*10+m[i])%x;
	while(!d[ld]) ld--;
}

bool compare(){//比大小 
	if(ld>la) return 1;
	else if(ld==la) for(int i=ld;i>0;i--) if(d[i]>ans[i]) return 1;
	return 0;
}

int main(){
	cin>>n;
	for(int i=0;i<=n;i++) cin>>a[i].l>>a[i].r;
	sort(a+1,a+n+1,cmp);
	for(int i=1;i<=n;i++){
		csh();
		for(int j=0;j<i;j++) multiply(a[j].l);
		divide(a[i].r);
		if(compare()) la=ld,memcpy(ans,d,sizeof(d));
	}
	for(int i=la;i>0;i--) cout<<ans[i];
}

不知道哪里写挂了x_x

2024/3/13 17:26
加载中...