社区讨论

50 pts求调

P1080[NOIP 2012 提高组] 国王游戏参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mhj9el76
此快照首次捕获于
2025/11/03 22:52
4 个月前
此快照最后确认于
2025/11/03 22:52
4 个月前
查看原帖
记录 高精度炸了
CPP
#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct node{
	int l,r;
}a[1005];
int n,l,sum[1005],s=4,ans[1005],si=0,maxn[1005],siz=0;
bool cmp(node x,node y){
	if(x.l*x.r==y.l*y.r)return x.r<y.r;
	return x.l*x.r<y.l*y.r;
}
bool BIG(){
	if(si!=siz)return si>siz;
	for(int i=0;i<=si;i++){
		if(ans[i]!=maxn[i])return ans[i]>maxn[i];
	}
	return 0;
}
void MAX(int *x){
	if(BIG()){
		while(ans[si]==0 && si!=0)si--;
		siz=si;
		for(int i=0;i<=si;i++){
			maxn[i]=ans[i];
			maxn[i]%=10000;
		}
	}
}
void CHU(int d){
	while(sum[s]==0 && s!=0)s--;
	int yu=0;
	si=s;
	for(int i=s;i>=0;i--){
		yu=sum[i]+yu*10000;
		ans[i]=yu/d;
		yu%=10000;
	}
}
void CHENG(int d){
	for(int i=s;i>=0;i--)sum[i]*=d;
	for(int i=s;i>=0;i--){
		sum[i+1]+=sum[i]/10000;
		sum[i]%=10000;
	}
	while(sum[s+1]!=0)s++;
}
int main() {
	scanf("%d\n%d %d",&n,&l,&a[0].l);
	for(int i=1;i<=n;i++)scanf("\n%d %d",&a[i].l,&a[i].r);
	sort(a+1,a+n+1,cmp);
	sum[0]=l;
	s=0;
	for(int i=1;i<=n;i++){
		CHU(a[i].r);
	//for(int i=s;i>=0;i--)cout<<ans[i];
	//cout<<'\n';
		MAX(ans);
		CHENG(a[i].l);
	}
	for(int i=siz;i>=0;i--)cout<<maxn[i];
	return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...