可能很若之的小问题
查看原帖
可能很若之的小问题
1040902
Takanashi_Hina楼主2024/7/12 19:31

写完之后有俩疑点

#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;
}

注释中的两个疑点

望大佬解答,感谢

2024/7/12 19:31
加载中...