#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;
}
请问这个代码有什么问题,总有一个测试点过不去,呜呜呜