zoukankan      html  css  js  c++  java
  • poj 2431 expedition

    题目大意:

    一辆车开始有n升油,距终点有L km,途中有m个加油站,给出每个加油站到终点的距离与每个加油站可加的油,油箱容量无限大,已知1升油可以使车跑1 km,问最少加多少次油能让车跑到终点。

    如果不能到达终点输出-1

     

    思路:
    模拟加优先队列,一步步看车有没有足够的油跑到下一个加油站,跑到了就把这个加油站能加的油放到优先队列里,没油了就加油,加优先队列的top,然后pop

    如果队列空了,还是不到的话就输出-1

    需要注意这道题非常坑的是加油站顺序不是给定的,需要排序,因为这个开始wa了

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #include<iomanip>
    #include<cstdlib>
    #include<queue>
    #define Maxn 1000005
    #define ll long long
    #define inf 2147483647
    using namespace std;
    int ans,t,n,l,p;
    struct gs
    {
        int b;
        int s;
        bool operator < (const gs &a) const
        {
            if(b<a.b) return true;
            return false;
        }
    }ss[Maxn];
    int main()
    {
        priority_queue <int> q;
        scanf("%d",&n);
        for(int i=0;i<n;i++)
        {
            scanf("%d%d",&ss[i].b,&ss[i].s);
        }
        scanf("%d%d",&l,&p);
        for(int i=0;i<n;i++)
        {
            ss[i].b=l-ss[i].b;
        }
        ss[n].b=l;
        sort(ss,ss+n);
        for(int i=0;i<=n;i++)
        {
            while(p<ss[i].b-t)
            {
                if(q.empty()) {printf("-1");return 0;}
                p+=q.top();
                ans++;
                q.pop();
            }
            p=p-ss[i].b+t;
            t=ss[i].b;
            q.push(ss[i].s);
        }
        printf("%d",ans);
    }
    View Code
  • 相关阅读:
    group by与聚合函数
    表联结
    项目延期 怎样规避风险
    虚拟机安装linux系统
    Cannot truncate a table referenced in a foreign key constraint
    李航--《统计学习方法总结》
    CART算法
    北航学长分享交流笔记
    CentOS7导入MySql数据表结构并显示表结构
    RedHat7安装mysql5.7数据库
  • 原文地址:https://www.cnblogs.com/yyc-jack-0920/p/7216985.html
Copyright © 2011-2022 走看看