社区讨论

高精的悲伤

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

讨论操作

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

当前回复
4 条
当前快照
1 份
快照标识符
@mi7yvmx9
此快照首次捕获于
2025/11/21 05:52
4 个月前
此快照最后确认于
2025/11/21 05:52
4 个月前
查看原帖
高精和不高精都是60,求大佬指点TAT
CPP
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#define ll unsigned long long
using namespace std;
struct node{
    int a,b;
    ll w;
}t[1001];
bool cmp(node x,node y){return x.w<y.w;}
int len=1,lenn=0;
int ans[10001],anss[10001],c[10001];
void gc(int x){
	for(int i=1;i<=len;i++)
	ans[i]*=t[x].a;
	for(int i=1;i<=len;i++){
		ans[i+1]+=ans[i]/10;
		ans[i]%=10;
	}
	if(ans[len+1]) len++;
}
void gchu(int x){
	int r=0;
	for(int i=len;i>=1;i--){
		int d=r*10+ans[i];
		ans[i]=d/t[x].b;
		r=d%t[x].b;
	}
	while(ans[len]==0&&len>1) len--;
}
int main(){
    int n,gl,gr;
    cin>>n>>gl>>gr;
    for(int i=1;i<=n;i++){
        cin>>t[i].a>>t[i].b;
        t[i].w=t[i].a*t[i].b;
    }
    sort(t+1,t+n+1,cmp);
    ans[1]=1;
    for(int i=1;i<=len;i++)
	ans[i]*=gl;
	for(int i=1;i<=len;i++){
		ans[i+1]+=ans[i]/10;
		ans[i]%=10;
	}
	if(ans[len+1]) len++;
    for(int i=1;i<=n;i++){
    	gchu(i);
    	//cout<<len<<" ";
    	if(len>lenn){
    		lenn=len;
    		for(int j=1;j<=lenn;j++)
    		anss[j]=ans[j];
		}
		else{
			if(len==lenn){
				for(int j=lenn;j>=1;j--){
					if(anss[j]>ans[j]) break;
					if(anss[j]==ans[j]) continue;
					if(anss[j]<ans[j]){
						for(int z=1;z<=lenn;z++)
    					anss[z]=ans[z];
    					break;
					}
				}
			}
		}		
		for(int j=1;j<=len;j++)
		ans[j]*=t[i].b;
		for(int j=1;j<=len;j++){
			ans[j+1]+=ans[j]/10;
			ans[j]%=10;
		}
		if(ans[len+1]) len++;
    	gc(i);
	}  	
	if(lenn==1&&anss[lenn]==0) anss[lenn]=1;
	for(int i=lenn;i>=1;i--) cout<<anss[i];
    return 0;
}

回复

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

正在加载回复...