zoukankan      html  css  js  c++  java
  • 5月5日

    poj2431

    题意:卡车开车到距离L个单位的地方,每开一个单位用1的油,路上共有n个加油站,距离终点a[i]的地方加油站可以加b[i]的油,问最少加多少次油可以到达终点

    分析:我们可以这样考虑,在到达加油站i时,就获得了一次在之后任何时候都可以加bi的权力,而在之后需要加油时,就认为是在之前经过的加油站加的油就可以了。这样我们在用一个优先队列进行维护即可,注意给出的数据是距离终点的距离

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <string>
     5 #include <vector>
     6 #include <algorithm>
     7 #include <set>
     8 #include <map>
     9 #include <bitset>
    10 #include <cmath>
    11 #include <queue>
    12 #include <stack>
    13 using namespace std;
    14 const int maxn=1e5+5;
    15 typedef pair<int,int> point;
    16 point s[maxn];
    17 int l,p,n;
    18 bool cmp(point x,point y)
    19 {
    20     return x.first<y.first;
    21 }
    22 int main()
    23 {
    24     int n;
    25     while(cin>>n)
    26     {
    27         for(int i=0;i<n;i++){
    28             scanf("%d%d",&s[i].first,&s[i].second);
    29         }
    30         cin>>l>>p;
    31         for(int i=0;i<n;i++){
    32             int t=l-s[i].first;
    33             s[i].first=t;
    34         }
    35         s[n].first=l,s[n].second=0;
    36         sort(s,s+n,cmp);
    37         int i=0,cnt=0;
    38         priority_queue<int> que;
    39         while(!que.empty())  que.pop();
    40         while(i<=n){
    41             while(p<s[i].first&&!que.empty()){
    42                 p+=que.top();
    43                 que.pop();
    44                 cnt++;
    45             }
    46             if(p<s[i].first) break;
    47             while(s[i].first<=p&&i<=n){
    48                 que.push(s[i].second);
    49                 i++;
    50             }
    51         }
    52 //        cout<<p<<endl;
    53         if(p>=l)  cout<<cnt<<endl;
    54         else  cout<<"-1"<<endl;
    55     }
    56     return 0;
    57 }
    View Code
  • 相关阅读:
    Java之this关键字的用法
    JavaSE 之 final 初探
    LinkedList 浅析示例
    HashSet 浅析示例
    ArrayList 浅析示例
    MySQL5.7 修改密码
    IE10 和 Chrome50 对日期 new Date() 支持的区别
    databtables 设置(显示)行号
    团队管理
    财务名称
  • 原文地址:https://www.cnblogs.com/wolf940509/p/5462635.html
Copyright © 2011-2022 走看看