求助大神
查看原帖
求助大神
983671
guowenxuan101楼主2023/7/12 15:02

第五个过不去,求助大佬

#include<bits/stdc++.h>
using namespace std;
double d1;//两个城市之间的距离
double c;//汽车油箱的容量	
double d2;//每升汽油能行驶的距离 
double p;//出发点每升汽油价格
int n;//沿途油站数油站
double di[10000];//离出发点的距离 
double pi[10000];//每升汽油价格
double yjy;
double gwx;
double s;//剩下的 
int main(){
	cin >> d1 >> c>> d2 >> p >> n;
	for(int i=1;i<=n;i++){
		cin >> di[i] >> pi[i];
	}
	di[n+1]=d1;//目的地
	pi[0]=p;
	gwx=d2*c;
	int m,q;//后面有用 
	int j;
	for(int i=1;i<=n;i++){
		if(di[i+1]-di[i]>gwx){
			cout << "No Solution";
			return 0;
		}
	}
	for(int i=0;i<=n;i=j){//所在加油站 
		for(j=i+1;j<=n+1;j++){//下一个加油站 
			if(di[j]-di[i]>gwx){
				j--;
				break;
			}
			if(pi[j]<pi[i]){
				m=j;
				q=i; 
				break;//如果更便宜就退出 
			}
		}
		if(pi[m]<pi[q]){//已经排除了所有到达不了的情况,直接if就可以 
			yjy+=((di[m]-di[q])/d2-s)*pi[q];
			s = 0;
		}else{
			yjy+=(c-s)*pi[q];
			s=c-(di[m]-di[q])/d2;
		}
		
	}
	printf("%.2lf",yjy);
	return 0;
}
2023/7/12 15:02
加载中...