写完之后有俩疑点
#include<bits/stdc++.h>
using namespace std;
struct node{
double cost;
double x;
node(double c,double n) : cost(c),x(n) {}//定义一个push的方式
};
deque <node> que;
double d[114],c,d1,d2,p[114],oil,ans;
int n;
int main()
{
cin>>d1>>c>>d2>>p[0]>>n;
for(int i=1;i<=n;i++)
{
cin>>d[i]>>p[i];
if(d[i]-d[i-1]>d2*c)//判断无解
{
printf("No Solution\n");
return 0;
}
}
d[n+1]=d1;
que.push_back(node(p[0],c));
ans+=p[0]*c;
oil=c;
for(int i=1;i<=n+1;i++)
{
double nd=(d[i]-d[i-1])/d2;//这一段需要的汽油
while(nd&&que.size())//计算行进耗油
{
node k=que.front();
que.pop_front();
if(k.x>nd)//不判断等于因为把0push回去很难受
{
k.x-=nd;//烧掉一部分油
oil-=nd;//跑掉的一定记得减去!!!!
que.push_front(k);
break;
}
nd-=k.x;//否则先减去这部分油
oil-=k.x;
}
if(i==n+1)//无需再加油
{
while(!que.empty())
{
ans-=(que.front().x*que.front().cost);//这里一定写front,写back不知道为啥会挂掉第三个点
que.pop_front();
}
break;
}
while(!que.empty()&&p[i]<que.back().cost)//开始退油 不知道为啥把!que.empty()写前面就能给我判断
{
node k=que.back();
ans-=(k.x*k.cost);
oil-=k.x;
que.pop_back();
}
que.push_back(node(p[i],c-oil));//是c不是n卡了我1hour
ans+=(c-oil)*p[i];//加满
oil=c;
}
printf("%.2lf\n",ans);
return 0;
}
注释中的两个疑点
望大佬解答,感谢