题目大意:
汽车从远处行驶向一个城镇,路途很远,汽油不足,沿途有一些加油站,给出加油站的位置和存油,在汽车油箱无限大的情况下求出所需加油次数最少为多少。
分析:
由于要加油的次数最少,因此最好是一次加的油量尽量多,而每次经过一个加油站,可以看做,今后可以在任意时刻使用这个站来加油,因此把当前汽油可达的加油站存入一个堆中,每次没油的时候从中取出最多的那次,当堆中没有油的时候就输出-1.
注意加油站的位置是距离城镇的位置
我想吐个槽。。。ACM题中的cows是宇宙间最聪明最傻缺最无理的生物。。。
#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;
struct st
{
int dist;
int fule;
bool operator < (const st & o)const
{
return dist>o.dist;
}
}stop[10002];
int main()
{
int i,j,k;
int pos,p,l;
int d;
priority_queue< int > que;
int n;
int ans;
while(scanf("%d",&n)!=EOF)
{
stop[0].dist=0;
stop[0].fule=0;
for(i=1;i<=n;i++)
{
scanf("%d%d",&stop[i].dist,&stop[i].fule);
}
sort(stop,stop+n+1);
scanf("%d%d",&l,&p);
pos=l;
ans=0;
for(i=0;i<=n;i++)
{
d=pos-stop[i].dist;
while(d>p)
{
if(!que.empty())
{
p+=que.top();
que.pop();
ans++;
}
else
{
printf("%d",-1);
return 0;
}
}
pos=stop[i].dist;
p-=d;
que.push(stop[i].fule);
}
printf("%d",ans);
}
}