社区讨论

求助,第五个点WA!!!

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

讨论操作

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

当前回复
4 条
当前快照
1 份
快照标识符
@lo8bi9bj
此快照首次捕获于
2023/10/27 15:54
2 年前
此快照最后确认于
2023/10/27 15:54
2 年前
查看原帖

代码

CPP
#include<cmath>
#include<cstdio>
#include<iomanip>
#include<iostream>
using namespace std;

const int MAXX=1e9;
const int MAXN=10;
double d[MAXN],p[MAXN],d1,c,d2,ans,maxd,minp=MAXX,l;
int n,minj;

int main(){
//	freopen("travel.in","r",stdin);
//	freopen("travel.ans","w",stdout);
	cin>>d1>>c>>d2>>p[0]>>n;
	d[n+1]=d1;
	p[n+1]=MAXX;
	int i;
	for(i=1;i<=n;i++){
		cin>>d[i]>>p[i];
		if(d[i]-d[i-1]>c*d2){
			cout<<"No Solution";
			return 0;
		}
	}
	if(d1-d[n]>c*d2){
		cout<<"No Solution";
		return 0;
	} 
	i=0;
	while(i<=n){
		minp=MAXX;
		//if(d[i+1]-d[i]>c*d2)
		maxd=min(d1-d[i],c*d2);
		//cout<<i;
		for(int j=i+1;maxd>=d[j]-d[i] && j<=n;j++){
			if(minp>p[j]){
				minp=p[j];
				minj=j;
			}
			if(minp<p[i]){break;} 
		}
		if(minp>=p[i] && c*d2>d1-d[i]){
			ans+=((d1-d[i])/d2)*p[i];
			break;
		}
		else{
			ans+=(d[minj]-d[i])/d2*p[i];
			i=minj;
		}
		//cout<<i;
	}
	cout<<fixed<<setprecision(2)<<ans;
	return 0;
}

回复

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

正在加载回复...