代码
#include<cmath>
#include<cstdio>
#include<iomanip>
#include<iostream>
using namespace std;
const int MAXX=1e9;
const int MAXN=10;
double d[MAXN],p[MAXN],d1,c,d2,ans,maxd,minp=MAXX,l;
int n,minj;
int main(){
cin>>d1>>c>>d2>>p[0]>>n;
d[n+1]=d1;
p[n+1]=MAXX;
int i;
for(i=1;i<=n;i++){
cin>>d[i]>>p[i];
if(d[i]-d[i-1]>c*d2){
cout<<"No Solution";
return 0;
}
}
if(d1-d[n]>c*d2){
cout<<"No Solution";
return 0;
}
i=0;
while(i<=n){
minp=MAXX;
maxd=min(d1-d[i],c*d2);
for(int j=i+1;maxd>=d[j]-d[i] && j<=n;j++){
if(minp>p[j]){
minp=p[j];
minj=j;
}
if(minp<p[i]){break;}
}
if(minp>=p[i] && c*d2>d1-d[i]){
ans+=((d1-d[i])/d2)*p[i];
break;
}
else{
ans+=(d[minj]-d[i])/d2*p[i];
i=minj;
}
}
cout<<fixed<<setprecision(2)<<ans;
return 0;
}