50分求助!
查看原帖
50分求助!
764950
TuringPuth楼主2023/3/8 20:50

大佬帮帮忙!

#include <bits/stdc++.h>
using namespace std;
bool flag;
int N;
double D1,C,D2,P,d[10],p[10];
double s,ans,now,minn;
void f(int t){
	if(now*D2+d[t]>=D1) return;
	int i=t,j=t;
	s=C*D2;//加满油能走的距离
	s+=d[t];//再加上现在离起点的距离
	//cout<<t<<' '<<s<<endl;
	while(d[i+1]<=s && i+1<=N){
		i++;
		if(p[i]<p[t]){
			j=i;
			break;
		}
	}
	if(j==t){
		if(s>=D1){
			ans+=p[i]*((D1-d[t])/D2-now);
			return;
		}
		i=t,minn=501;
		while(d[i+1]<=s && i+1<=N){
			i++;
			if(minn>p[i]){
				minn=p[i];
				j=i;
			}
		}
		if(i==t){
			cout<<"No Solution";
			flag=true;
			return;
		}
		ans+=p[t]*((s-d[t])/D2-now);
		now=D2-(d[j]-d[t])/D2;
		f(j);
	} 
	else{
		ans+=p[t]*((d[j]-d[t])/D2-now);
		now=0;
		//cout<<j<<' '<<ans<<endl;
		f(j);
	}
}
int main(){
	cin>>D1>>C>>D2>>p[0]>>N;
	for(int i=1;i<=N;i++){
		cin>>d[i]>>p[i]; 
	}
	f(0);
	if(!flag) printf("%.2f",(int)(ans*100+0.5)/100.0);
	return 0;
}
2023/3/8 20:50
加载中...