#include<bits/stdc++.h>
using namespace std;
struct node{
double d,p;
};
node a[10];
int n;
double l,c,d,p,dis,cnow=0,money=0;
bool cmp(node a,node b)
{
return a.d<b.d;
}
int main()
{
cin>>l>>c>>d>>p>>n;
for(int i=1;i<=n;i++) cin>>a[i].d>>a[i].p;
sort(a,a+n+1,cmp);
a[n+1].p=0;
a[n+1].d=l;
dis=c*d;
for(int i=0;i<=n;i++)
{
if(a[i+1].d-a[i].d>dis)
{
cout<<"No Solution";
return 0;
}
int k=-1;
for(int j=i+1;j<=n;j++)//寻找比本站更便宜的最近的加油站
{
if(a[j].d-a[i].d<dis && a[j].p<a[i].p)
{
k=j;
break;
}
}
if(k==-1)//如果没有,那么把油加满
{
money+=(c-cnow)*a[i].p;
cnow=c;
}
else
{
if((a[k].d-a[i].d)/d<=cnow)//如果剩余油量够到达,那么用剩余油开车
{
cnow-=(a[k].d-a[i].d)/d;
i=k-1;
}
else//如果剩下的油量不够到达,就把油加到刚好到下一站的油
{
money+=((a[k].d-a[i].d)/d-cnow)*a[i].p;
cnow=0;
i=k-1;
}
}
}
cout<<fixed<<setprecision(2)<<money;
return 0;
}
代码如上,思路看上去没有错,但是样例还是 一直错,求大佬指出错误