解题思路
枚举距离i,若距离i处有加油站,就把油量加入大根堆。
现在需要i个单位的油,判断p(当前有的油量)是否>i,不是就不断弹出栈顶,加入经过的加油站能补充的油量。不够就直接输出-1
代码
#include<bits/stdc++.h>
using namespace std;
int n,l,p,ans,v[1000010];
struct c{
int x,y;
}a[10010];
priority_queue<int>q;
int main(){
scanf("%d%d%d",&l,&p,&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&a[i].x,&a[i].y);
v[a[i].x]=i;
}
for(int i=1;i<=l;i++)
{
if(v[i])q.push(a[v[i]].y);
while(i>p&&!q.empty())
{
p=p+q.top();
q.pop();
ans++;
}
if(i>p)
{
printf("-1\n");
return 0;
}
}
printf("%d",ans);
}