第四个数据点WA,但数据点下下来运算答案都一样,就是不知道为什么WA
#include<bits/stdc++.h>
using namespace std;
long double d1,c,d2,p,maxn,ans,cp,q;
int n;
struct node{
long double di,pi;
}op[1000000];
bool cmp(node X,node Y)
{
return X.di<Y.di;
}
void tan(int x){
long double q=c*d2,minp=1e9;
int j;
for(int i=x+1;i<=n;i++){
if(op[i].di-op[x].di>q){
break;
}
if(op[i].pi<minp){
minp=op[i].pi;
j=i;
}
}
if(op[x].pi<=op[j].pi&&op[x].di+q>=d1)
{
ans+=((d1-op[x].di)/d2-cp)*op[x].pi;
return;
}
if(op[x].pi<op[j].pi){
ans+=(c-cp)*op[x].pi;
cp=c-(op[j].di-op[x].di)/d2;
}
else{
ans+=((op[j].di-op[x].di)/d2-cp)*op[x].pi;
cp=0.0;
}
tan(j);
}
int main(){
cin>>d1>>c>>d2>>p>>n;
for(int i=1;i<=n;i++){
cin>>op[i].di>>op[i].pi;}
op[0].di=0,op[0].pi=p;
q=c*d2;
for(int i=1;i<=n+1;i++){
maxn=max(maxn,op[i].di-op[i-1].di);
}
if(c*d2<maxn){
cout<<"No Solution";
return 0;
}
cp=0.0;
sort(op+1,op+n+1,cmp);
tan(0);
printf("%.2Lf",ans);
return 0;
}