样例不过。。。。。。
#include<iostream>
#include<cstdio>
#include<deque>
float d1,c,d2,p,n;
const int N=500+10;
float P[N],D[N],how_add[N],exchange,ans;
using namespace std;
deque<int> deq;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin>>d1>>c>>d2>>p>>n;
deq.push_back(0);
P[0]=p;
how_add[0]=c;
for(int i=1;i<=n;i++)
{
cin>>D[i]>>P[i];
D[i]=D[i]-D[i-1];
if(D[i]>c*1.0/d2)
{
cout<<"No Solution";
return 0;
}
else
{
while(D[i])
if(D[i]<how_add[deq[0]]*1.0/d2)
{
how_add[deq[0]]-=D[i]*1.0/d2;
exchange+=D[i]*1.0/d2;
goto qq;
}
else
{
D[i]-=how_add[deq[0]]*1.0/d2;
exchange+=how_add[deq[0]]*1.0/d2;
deq.pop_front();
}
}
qq:
;
while(P[i]<P[deq.size()-1])
{
ans-=how_add[deq.size()-1]*P[deq.size()-1];
exchange+=how_add[deq.size()-1];
deq.pop_back();
}
ans+=exchange*P[i];
deq.push_back(i);
how_add[i]=exchange;
}
while(!deq.empty()){
ans-=how_add[deq.size()-1]*P[deq.size()-1];
deq.pop_back();
}
printf("%.2f",ans);
return 0;
}