答案不对,求大佬指教
查看原帖
答案不对,求大佬指教
1052007
wanxuhang楼主2023/9/13 23:02
#include<bits/stdc++.h>
using namespace std;
double d1,c,d2,p;
int n;
int nowState=0;
double sum=0;
struct disPrice{
	double distance,price;
};
disPrice a[11];
void findStation(){
	for (int x=1;x<=n;x++){
		if (nowState==d1) break;
		int f=0;
		int minindex=100;//找到最小值坐标 
		double oil=0;//剩余油量
		for (int i=2;i<=n;i++){
			double minn=100;//找到最小值 
			if (i<=nowState) continue;//限制从现在的位置向后找 
			if (c*d2<a[i].distance-a[nowState].distance) break;//如果油量不够,结束循环 
			if (a[i].price<a[nowState].price){
				sum+=((a[i].distance-a[nowState].distance)/d2-oil)*a[nowState].price;
				f=1;
				nowState=i;
			}//找到最近的价格比当前便宜的油站加油 
			else{
				if (a[i].price<minn){
					minn=a[i].price;
					minindex=i;
				}
			}
			f=0;
		}
		if (f==0){
			sum+=c*a[nowState].price;
			oil=c-(a[minindex].distance-a[nowState].distance)/d2;
			nowState=minindex;
			
		}
	}
	return;
}
bool cmp(disPrice a,disPrice b){
	return a.distance<b.distance;
}
int main(){
	cin>>d1>>c>>d2>>p>>n;
	for (int i=1;i<=n;i++){
		cin>>a[n].distance>>a[n].price;
	}
	a[0].distance=0;
	a[0].price=p;
	sort(a,a+n,cmp);
	findStation();
	printf("%.2lf",sum);
	return 0;
}
2023/9/13 23:02
加载中...