zoukankan      html  css  js  c++  java
  • POJ 2431 Expedition

    练习优先队列的第一道题

    题意:

    一辆卡车需要行驶 $L$ 的距离, 卡车油箱里有 $P$ 单位的油 , 每行驶一单位长度耗费一单位的油, 在沿途有 $N$ 个加油站 ,第 $i$ 个加油站在距离起点 $Ai$ 的位置,可以加 $Bi$ 单位的油,假设油箱容量无限大, 最少加多少次油可以到达终点

    样例:

    $N = 4, L = 25, P = 10$

    $A$ = {10, 14, 20, 21}

    $B $= {10, 5, 2, 4}

    最少加油次数:2

    题解:

    使用从大到校的顺序依次取出数值的优先队列,在经过加油站的时候向优先队列里加入 $Bi$, 油箱空的时候如果优先队列也是空的那么无法到达,反之取出 $que.top$, 给油箱加油

    时间复杂度:$O(N*log(N))$

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    
    const int maxn = 1e5 + 10;
    int N, L, P;
    int A[maxn], B[maxn];
    
    void solve() {
        A[N] = L;
        B[N] = 0;
        N ++;
    
        priority_queue<int> que;
        int ans = 0, pos = 0, tank = P;
        for(int i = 0; i < N; i ++) {
            int d = A[i] - pos;
            while(tank - d < 0) {
                if(que.empty()) {
                    printf("-1
    ");
                    return ;
                }
                tank += que.top();
                que.pop();
                ans ++;
            }
            tank -= d;
            pos = A[i];
            que.push(B[i]);
        }
        printf("%d
    ", ans);
    }
    
    int main() {
        scanf("%d%d%d", &N, &L, &P);
        for(int i = 0; i < N; i ++)
            scanf("%d%d", &A[i], &B[i]);
        solve();
        return 0;
    }
    

      

  • 相关阅读:
    在Centos中导入sql文件的方法
    Centos7.4 版本环境下安装Mysql5.7操作记录
    CentOS 7.4下使用yum安装MySQL5.7.20 最简单的
    MySql命令集合
    常用linux命令
    HDP Spark2 HIVE3.1 的问题
    YARN 的调度选项
    Sqoop 遇到的问题
    Kubernetes 集群部署(4) -- Node 部署
    HDP 中 yarn 和 MR2 的配置
  • 原文地址:https://www.cnblogs.com/zlrrrr/p/9547624.html
Copyright © 2011-2022 走看看