第5测试点错了 大佬看看吧!
查看原帖
第5测试点错了 大佬看看吧!
1258361
lokiww楼主2025/1/11 23:26

求求了看看吧第5测试点错了

#include<bits/stdc++.h>
using namespace std;
struct pp{
	double d,p;//结构体
}a[10];
double km,c,kml,m,ans; 
int n;
bool cmp(pp qqq,pp www){
	return qqq.d<www.d;//结构体排序
}
int main(){
	cin>>km>>c>>kml>>m>>n;
	a[0].d=0;
	a[0].p=m;
	a[n+1].d=km;
	a[n+1].p=0;//初始化,把单独数据归入整体
	for(int i=1;i<=n;i++){
		cin>>a[i].d>>a[i].p;
	}
	sort(a+1,a+1+n,cmp);
	for(int i=1;i<=n+1;i++){
		if(a[i].d-a[i-1].d>c*1.0*kml){
			cout<<"No Solution";
			return 0;
		}
		
	}
	int sum=0;//上次标记的加油站
	double sum1=m,sum2=0;//sum点的油价,sum离起点多少km 
	for(int i=1;i<=n+1;i++){
		if(a[i+1].d-sum2>c*1.0*kml){//如果走不到下个加油站
			ans+=a[sum].p*1.0*((a[i].d-sum2)/kml);//加的钱数
			sum=i;
			sum1=a[i].p;
			sum2=a[i].d;//标记这个点
			continue;
		}
		if(a[i].p<=sum1){//如果比上个标记的加油站便宜
			ans+=a[sum].p*1.0*((a[i].d-sum2)/kml);//加的钱数
			sum=i;
			sum1=a[i].p;
			sum2=a[i].d;//标记这个加油站
		}
	}
	printf("%.2lf",ans);//输出
	return 0;
}

2025/1/11 23:26
加载中...