社区讨论

测试点5WA 爸爸救救

P1016[NOIP 1999 普及组/提高组] 旅行家的预算参与者 2已保存回复 1

讨论操作

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

当前回复
1 条
当前快照
1 份
快照标识符
@lw66iddl
此快照首次捕获于
2024/05/14 17:16
2 年前
此快照最后确认于
2024/05/14 20:12
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
double d1,c,d2,maxn,ans,last;
int n,now;
struct GGBond{
	double d,p; 
}o[10];
bool tmp(GGBond a,GGBond b){
	return a.p<b.p;
}
int main(){
	cin>>d1>>c>>d2>>o[0].p>>n;
	for(int i=1;i<=n;i++) cin>>o[i].d>>o[i].p;
	sort(o+1,o+1+n,tmp);
	maxn=c*d2,o[n+1].d=d1;
	for(int i=0;i<=n;i++){
		if(o[i].d-o[i-1].d>maxn){
			printf("No Solution");
			return 0;
		}
	}
	while(1){
		bool flag=false;
		int next,k;
		double minn=510;
		for(int i=now+1;i<=n && o[i].d-o[now].d<=maxn;i++){
			if(o[i].p<=o[now].p && !flag){
				ans+=((o[i].d-o[now].d)/d2-last)*o[now].p;
				next=i,last=0;
				flag=true;
				break;
			}
			if(minn>o[i].p) minn=o[i].p,k=i;
		}
		if(!flag){
			if(d1-o[now].d<=maxn){
				ans+=((d1-o[now].d)/d2-last)*o[now].p;
				break;
			}else{
				ans+=(c-last)*o[now].p;
				last=c-(o[k].d-o[now].d)/d2;
				next=k;
			}
		}
		now=next;
	}
	cout<<fixed<<setprecision(2)<<ans;
	return 0;
}
测试点5输入: 200.0 100.0 2.0 4.00 2 50.0 3.00 60.0 2.00 正确输出: 255.00 我的输出: 260.00 QQQQAQQQQ

回复

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

正在加载回复...