求助75
查看原帖
求助75
235901
Always_Remember_It楼主2023/10/15 17:21
#include <bits/stdc++.h>
using namespace std;
const int N=510;
int next[N];
struct Sta{
	double d,p;
}sta[N];
bool cmp(Sta a,Sta b){
	return a.d<b.d;
}
int main(){
	double d1,c,d2,ps;cin>>d1>>c>>d2>>ps;
	int n;cin>>n;
	sta[0].p=ps;
	sta[n+1].d=d1;
	sta[n+1].p=520.0;
	for(int i=1;i<=n;i++){
		cin>>sta[i].d>>sta[i].p;
	}
	sort(sta,sta+n+2,cmp);
	for(int i=0;i<=n;i++){
		next[i]=n+1;
	}
	for(int i=0;i<n;i++){
		for(int j=i+1;j<=n;j++){
			if(sta[j].p<sta[i].p){
				next[i]=j;
				break;
			}
		}
	}
	int now=0;
	double sum=0,left=0;
	while(now<=n){
		if(c*d2>=sta[next[now]].d-sta[now].d){
			sum+=((sta[next[now]].d-sta[now].d-left)/d2)*sta[now].p;
			now=next[now];
			left=0;
			continue;
		}
		if(sta[now+1].d-sta[now].d>c*d2){
			cout<<"No Solution"<<endl;
			return 0;
		}
		int point=0;
		double minn=520.0;
		for(int i=now+1;i<=n+1;i++){
			if(sta[i].d-sta[now].d>c*d2) break;
			if(sta[i].p<minn){
				minn=sta[i].p;
				point=i;
			}
		}
		sum+=(c-left)*sta[now].p;
		left=c-(sta[point].d-sta[now].d)/d2;
		now=point;
	}
	printf("%.2f",sum);
	return 0;
}
2023/10/15 17:21
加载中...