#include<cstdio>
#include<algorithm>
#include<queue>
#define M 10005
using namespace std;
struct gas
{
int dis;//注意这里的距离是距终点的距离
int fule;
};
bool cmp(gas A, gas B)
{
return A.dis < B.dis;
}
gas a[M];
priority_queue<int> que;
int N, L, P;
int main()
{
scanf("%d", &N);
for(int i = 0; i < N; i++)
scanf("%d %d", &a[i].dis, &a[i].fule);
scanf("%d %d", &L, &P);
for(int i = 0; i < N; i++)
a[i].dis = L - a[i].dis;
sort(a, a + N, cmp);
a[N].dis = L;
a[N].fule = 0;
N++;//绝对不能少,不然会WA
int count = 0, position = 0, tank = P;
for(int i = 0; i < N; i++)
{
int d = a[i].dis - position;
while(tank - d < 0)
{
if(que.empty())
{
puts("-1");
return 0;
}
tank = tank + que.top();
que.pop();
count++;
}
tank = tank - d;
position = a[i].dis;
que.push(a[i].fule);//把走过的加油站放进优先队列等没油之后,
//优先加经过的油最多的加油站
}
printf("%d\n", count);
return 0;
}
11-16
325
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交