刷题——Expedition POJ

来源:互联网 发布:java system.gc 编辑:程序博客网 时间:2024/06/08 20:14
/*
一辆车子要去往L远的镇上,有P容量的油,没走1单位消耗一单位的油
路上有n个加油站
给你加油站离镇的距离和加油站的油量
求最小加油次数到镇上
到不了则输出-1
*/
#include <stdio.h>
#include <queue>
using namespace std;
struct node
{
    friend bool operator< (node n1, node n2)
    {
        return n1.jl<n2.jl;
    }
    int qy;
    int jl;
};
priority_queue<node>que;
priority_queue<int>q;
int main(){
    int n,l,p;
    while(~scanf("%d",&n)){
        while(!que.empty())que.pop();
        while(!q.empty())q.pop();
        for(int i=0;i<n;i++){
            int jl,qy;
            scanf("%d %d",&jl,&qy);
            que.push(node{qy,jl});
        }
        scanf("%d %d",&l,&p);
        int ks=p,num=0;
        while(ks<l){
            if(!q.empty()){
                p+=q.top();
                ks+=q.top();
                q.pop();
                num++;
            }
            while(!que.empty()&&(l-que.top().jl)<=p){
                q.push(que.top().qy);
                que.pop();
            }
            if(ks<l&&q.empty())break;
        }
        if(ks<l)printf("-1\n");
        else printf("%d\n",num);
    }
    return 0;
}
原创粉丝点击