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
  • 相关阅读:
    121. Best Time to Buy and Sell Stock
    70. Climbing Stairs
    647. Palindromic Substrings
    609. Find Duplicate File in System
    583. Delete Operation for Two Strings
    556 Next Greater Element III
    553. Optimal Division
    539. Minimum Time Difference
    537. Complex Number Multiplication
    227. Basic Calculator II
  • 原文地址:https://www.cnblogs.com/wolf940509/p/5462635.html
Copyright © 2011-2022 走看看