poj题目
一辆车经过几个加油站,求能到达目的地的最少加油次数
一到没油的地方就找前面加油站中加油最多的地方加油
priority_queue<int que;
int n,l,pp,a[10020],b[10020];
struct node{
int a,b;
}p[10005];
int cmp(node a,node b){
return a.a<b.a;
}
void init(){
cin>>n;
for(int i=0;i<n;i++){
cin>>p[i].a>>p[i].b;
}
cin>>l>>pp;
for(int i=0;i<n;i++){
p[i].a=l-p[i].a;
}
sort(p,p+n,cmp);
}
void solve(){
p[n].a=l;p[n].b=0;
n++;
priority_queue<int>que;//取出最大值
// priority_queue<int,vector<int>,greater<int> >que;每次取出最小值
int ans=0,pos=0,tank=pp;
for(int i=0;i<n;i++){
int d = p[i].a-pos;
while(tank-d<0){
if(que.empty()){
puts("-1");
return ;
}
tank+=que.top();
que.pop();
ans++;
}
tank-=d;
pos=p[i].a;
que.push(p[i].b);
}
printf("%d\n",ans);
}
int main(){
SIS;
init();
solve();
return 0;
}