#include<string.h>
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
struct point {
int dist,pow,num;
bool operator <(const point &b) const{
if(pow<b.pow) return true;
else return false;
}
};
point P[100005];
bool cmp(point a,point b)
{
if(a.dist>b.dist) return true;
else return false;
}
bool mark[100005];
int main()
{
int i,n,num;
point T,W;
priority_queue<point>Q;
while(scanf("%d",&n)==1){
while(!Q.empty())Q.pop();
num=0;
memset(mark,true,sizeof(mark));
for(i=0;i<n;i++)
scanf("%d%d",&P[i].dist,&P[i].pow);
sort(P,P+n,cmp);
scanf("%d%d",&T.dist,&T.pow);
for(i=0;i<n;i++)
P[i].num=i;
T.num=-1;
Q.push(T);
while(!Q.empty()){
Q.pop();
if(T.pow>=T.dist) break;
for(i=T.num+1;i<n;i++)
if(T.pow-(T.dist-P[i].dist)>=0&&mark[i]){
Q.push(P[i]);
mark[i]=0;
}
if(Q.empty()) break;
W=();
if(W.dist>T.dist){
T.pow+=W.pow;
}
else{
W.pow+=T.pow-(T.dist-W.dist);
T=W;
}
num++;
if(T.pow>=T.dist) break;
}
if(T.pow>=T.dist)printf("%d\n",num);
else printf("-1\n");
}
return 0;
}
HIT 2051
原创wx6100ce7ff01a6 ©著作权
©著作权归作者所有:来自51CTO博客作者wx6100ce7ff01a6的原创作品,请联系作者获取转载授权,否则将追究法律责任
这题说的是 一辆汽车 每走一单位的距离就消耗一单位的燃料,然后,他要回城里去,当然他与城镇之间有n个加油站 ,他的油箱可以为 无穷大 ,这样分析后发现进不进汽油站 与 汽油站在哪无关 ,只与加油站的 汽油有关 (当然是他能到达的加油站)然后直接贪心
上一篇:Codeforces Round #246 (Div. 2)
下一篇:括号问题
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Argus (P2051)
#include#include#include#include#include#include#include#include#y a,my b){ ret
stream output integer system query -
Android hit android hit service
摘要:本节主要来讲解Android10.0 Native层HIDL服务的获取原理阅读本文大约需要花费23分钟。上一节,我们学习了Native层 HIDL服务的注册原理,这一节我们来看看Native层HIDL服务的获取流程。 5.IDemo的服务获取 IDemo的HIDL服务获取流程如下图所示: 5.1调用栈如下 5.2 main[\v
Android hit Android10.0 Android Q hwbinder binder -
hit test
MSDN对它的解释是:The WM_NCHITTEST message is sent to a window when the cursor moves, or when a mouse button is press
hit test WM_NCHITTEST Windows 消息响应 标题栏
















