P1080 国王游戏 60分 求调(写高精还是60分)
  • 板块学术版
  • 楼主csb0118
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/9/24 22:28
  • 上次更新2024/9/25 14:19:42
查看原帖
P1080 国王游戏 60分 求调(写高精还是60分)
1200794
csb0118楼主2024/9/24 22:28

P1080国王游戏,写了高精还是只有60分(是我菜),求调!

以下是代码:

#include<bits/stdc++.h>
using namespace std;
struct node{
	int x,y;
}a[1001];
bool cmp(node x,node y){
	return  x.x*x.y<y.x*y.y;
}
int s[1001],m[1001],p[1001],ls,lm,lp;
int n;
void cheng(int x){
	for(int i=1;i<=ls;i++)
		s[i]*=x;
	for(int i=1;i<=ls;i++){
		s[i+1]+=s[i]/10;
		s[i]%=10;
	}
	while(s[ls+1]!=0)ls++;
}
void Max(int x){
	lp=ls;
	int d=0;
	bool f=0;
	for(int i=ls;i>=1;i--){
		d=d*10+s[i];
		p[i]=d/x;
		if(p[i]==0&&f==0)lp--;
		else f=1;
		d%=x;
	}
	if(lp>lm){
		lm=lp;
		for(int i=1;i<=lp;i++)
			m[i]=p[i];
	}
	if(lp==lm){
		f=0;
		for(int i=lp;i>=1;i--){
			if(p[i]>m[i]){
				f=1;
				break;
			}
			if(p[i]<m[i])
				break;
		}
		if(f==1)
			for(int i=1;i<=lp;i++)
				m[i]=p[i];
	}
}
int main(){
	cin>>n;
	for(int i=1;i<=n+1;i++)
		cin>>a[i].x>>a[i].y;
	sort(a+2,a+n+2,cmp);
	s[++ls]=1;
	for(int i=2;i<=n+1;i++){
		cheng(a[i-1].x);
		Max(a[i].y);
	}
	for(int i=lm;i>=1;i--)
		cout<<m[i];
	return 0;
}
2024/9/24 22:28
加载中...