zoukankan      html  css  js  c++  java
  • 【POJ

    Expedition

    直接中文

    Descriptions

    一群奶牛抓起一辆卡车,冒险进入丛林深处的探险队。作为相当差的司机,不幸的是,奶牛设法跑过一块岩石并刺破卡车的油箱。卡车现在每运行一个单位的距离泄漏一个燃料单位。 

    为了修理卡车,奶牛需要沿着一条蜿蜒的长路行驶到最近的城镇(距离不超过1,000,000个单位)。在这条路上,在城镇和卡车的当前位置之间,有N(1 <= N <= 10,000)燃料站,奶牛可以停下来获得额外的燃料(每站1..100个单位)。 

    丛林对人类来说是一个危险的地方,对奶牛尤其危险。因此,奶牛希望在前往城镇的路上尽可能少地停下燃料。幸运的是,他们的卡车上的油箱容量非常大,实际上它可以容纳的燃油量没有限制。卡车目前距离城镇L单位,有P单位的燃料(1 <= P <= 1,000,000)。 

    确定到达城镇所需的最小停留次数,或者奶牛根本无法到达城镇。 

    Input

    *第1行:单个整数,N 

    *行2..N + 1:每行包含两个以空格分隔的整数,用于描述燃料停止:第一个整数是从城镇到停靠点的距离; 第二个是该站点可用的燃料量。 

    *行N + 2:两个以空格分隔的整数,L和P.

    Output

    *第1行:一个整数,给出到达城镇所需的最少燃料停留次数。如果无法到达城镇,则输出-1。

    Sample Input

    4
    4 4
    5 2
    11 5
    15 10
    25 10
    

    Sample Output

    2
    2
    

    Hint

    输入细节: 

    卡车距离城镇25个单位; 这辆卡车有10个燃料单位。沿着这条路,距离城镇4,5,11和15的距离有4个燃料站(所以这些距离最初距离卡车的距离为21,20,14和10)。这些燃料停止装置可分别提供多达4个,2个,5个和10个单位的燃料。 

    输出细节: 

    驱动10个单位,停止再购买10个单位的燃料,再开4个单位,停止再购买5个单位的燃料,然后开车到镇上。
     
    题目链接
     
    假如我经过一个加油站,我就获得了加这个站的油的权利,那么我可以一直走,一直走到没油,这时候取出我前面能加的油里面最多的那个加上继续走,讲这些加油站放入优先队列即可
     
    AC代码
    #include <iostream>
    #include <cstdio>
    #include <fstream>
    #include <algorithm>
    #include <cmath>
    #include <deque>
    #include <vector>
    #include <queue>
    #include <string>
    #include <cstring>
    #include <map>
    #include <stack>
    #include <set>
    #include <sstream>
    #define IOS ios_base::sync_with_stdio(0); cin.tie(0);
    #define Mod 1000000007
    #define eps 1e-6
    #define ll long long
    #define INF 0x3f3f3f3f
    #define MEM(x,y) memset(x,y,sizeof(x))
    #define Maxn 100000+5
    using namespace std;
    struct node
    {
        int dis;//距离
        int value;//
        bool operator<(const node &c)const//按距离从大到小排序
        {
            return dis>c.dis;
        }
    };
    node a[Maxn];
    priority_queue<int>q;
    int L,P,N;
    int main()
    {
        cin>>N;
        for(int i=0;i<N;i++)
            cin>>a[i].dis>>a[i].value;
        cin>>L>>P;
        sort(a,a+N);//排序
        q.push(P);
        int ans=0,i=0;
        while(L>0&&!q.empty())
        {
            ans++;//用了几个加油站
            L-=q.top();
            q.pop();
            while(i<N&&L<=a[i].dis)//L<=a[i].dis,即进过加油站,存入队列
            {
                q.push(a[i].value);
                i++;
            }
        }
        if(L>0)
            cout<<-1<<endl;
        else
            cout<<ans-1<<endl;//第一次的油是自己的
        return 0;
    }
  • 相关阅读:
    maven打包相关
    增强现实中的摄像机成像模型
    关于sql的exists
    oracle 连接之后出现 no logged on 问题
    关于oracle用户名登录
    myeclipse的SVN插件使用
    svn客户端使用
    svn服务器端使用
    SSH整合
    spring事务管理,xml配置aop事务和注解配置aop事务
  • 原文地址:https://www.cnblogs.com/sky-stars/p/11332071.html
Copyright © 2011-2022 走看看