#include<stdio.h>
#include<queue>
#include<algorithm>
using namespace std;
struct stop
{
int x;
int v;
}s[10010];
bool comp(stop s1, stop s2)
{
return s1.x < s2.x;
}
int main()
{
int n, i, L, P;
while(~scanf("%d",&n))
{
for(i = 0; i < n; i++)
scanf("%d%d",&s[i].x, &s[i].v);
scanf("%d%d",&L,&P);
for(i = 0; i < n; i++)
s[i].x = L - s[i].x; //转化为加油站到起点的距离
s[n].x = L;
s[n++].v = 0; //把终点也认为是加油站
sort(s, s+n, comp);
priority_queue<int, vector<int>, less<int> > Q; //值大的优先
int rest = P; //剩余油量
int ans = 0; //加油次数
int pos = 0; //卡车所在的上一个位置
for(i = 0; i < n; i++)
{
int dis = s[i].x - pos; //从上个加油站到此位置要行驶的距离
while(rest - dis < 0) //剩余油量不能到达此位置
{
if(Q.empty()) //没有油可加
{
ans = -1;
break;
}
rest += Q.top();
Q.pop();
ans++;
}
if(ans == -1)
break;
rest = rest - dis;
pos = s[i].x;
Q.push(s[i].v);
}
printf("%d\n",ans);
}
return 0;
}
poj2431 Expedition
最新推荐文章于 2021-02-26 15:04:16 发布
本文介绍了一个使用C++解决的典型算法问题——加油站问题。该问题的目标是在给定的路程中确定最少的加油次数。文章通过代码展示了如何利用优先队列实现最优解,并详细解释了算法流程。
380

被折叠的 条评论
为什么被折叠?



