能帮忙看看代码吗,有一个测试点过不去
查看原帖
能帮忙看看代码吗,有一个测试点过不去
1162490
xiaoyaoxiake楼主2025/7/23 09:58
#include <bits/stdc++.h>
using namespace std;
// 到终点的距离,总容量,每升可行驶距离,初始价格,每站离起点距离,每站价格,结果,现在油量 
float dis,c,drv,pri,d[10],p[10],price=0,now_c=0;
int n;
int main(){
	cin>>dis>>c>>drv>>pri>>n;
	d[0]=0;
	p[0]=pri;
	for(int i=1;i<=n;i++){
		cin>>d[i]>>p[i];
	}
	int now_n = 0;
	if(n==0){
		if(dis>c*drv){
			cout<<"No Solution";
		}
		else{
			printf("%.2f", p[now_n]*((dis-d[now_n])/drv));
		}
	}
	while(n){
		int tmp_n=now_n+1;
		if(tmp_n>n){
			if((dis-d[now_n])/drv > c){
				cout<<"No Solution";
				return 0;
			}
			printf("%.2f", price + p[now_n]*((dis-d[now_n])/drv)-now_c);
			return 0;
		}
		float ans=p[now_n];
		int ans_n=now_n;
		float min=700;
		int min_n=now_n;
		if(c*drv<d[tmp_n]-d[now_n]){
			cout<<"No Solution";
			return 0;
		}
		while(tmp_n<=n && c*drv>=d[tmp_n]-d[now_n]){
			// 有比现在站点价格低的 
			if(p[tmp_n]<ans){
				ans=p[tmp_n];
				ans_n=tmp_n;
				break;
			}
			// 没有比现在站点价格低的 
			if(p[tmp_n]<min){
				min=p[tmp_n];
				min_n=tmp_n;
			}
			tmp_n++;
			// 走到终点 
			if(tmp_n>n && ans_n == now_n && c*drv>=dis-d[now_n]){
				price += p[now_n]*((dis-d[now_n])/drv-now_c);
				printf("%.2f",price);
				return 0;
			}
		}
		if(ans_n==now_n){
			price += p[now_n]*(c-now_c);
			now_n = min_n;
			now_c = c - (d[min_n] - d[now_n]) / drv;
		}
		else{
			price += p[now_n] * ((d[ans_n] - d[now_n]) / drv - now_c);
			now_n = ans_n;
			now_c = 0;
		}

	}
	
	
	
	return 0;
}

请问这个代码有什么问题,总有一个测试点过不去,呜呜呜

2025/7/23 09:58
加载中...