【POJ 2431】【优先队列】【Expedition】

  优先队列吧,和一般队列类似,只不过pop和top都是取最大值。

#include "iostream"
#include "string.h"
#include "queue"
using namespace std;
int main(int argc, char const *argv[])
{
  int t;
  int l,p;
  int a[10005];
  int b[10005];
  while(~scanf("%d",&t))
  {
    priority_queue<int> que;
    for (int i = 0; i < t; ++i)
    {
      scanf("%d %d",&a[i],&b[i]);
      a[i]=l-a[i]; //加油站到终点的距离转换成加油站到起点的距离
    }
    scanf("%d %d",&l,&p);
    a[t]=l;
    b[t]=0;
    t++;//把终点也设置为加油站就可以方便计算。
    int num=0,pos=0,tank=p;
    for (int i = 0; i < t; ++i)
    {
      while(tank-(a[i]-pos)<0)
      {
        if(que.empty())
        {
          return 0;
        }
        tank+=que.top();
        que.pop();
        num++;
      }
      tank-=(a[i]-pos);
      pos=a[i];
      que.push(b[i]);
    }
    cout<<num<<endl;
  }
  return 0;
}


你可能感兴趣的:(数据结构,C++,poj)