Expedition
给出n+1个整点\(\{x_i\}\)(保证递增排序),一个司机带着初始油量p,从\(x_{n+1}\)出发,每行驶一个单位长度消耗一个油量,其中\(x_1\sim x_n\)为加油站,到达第i个加油站,可以选择获得油量\(a_i\)(不允许重复加油),询问其实你可以这样理解\(a_{n+1}=p\),开始油量为0,询问司机是否能到达原点,如果可以的话,请问最少的加油次数,\(n\leq 10000,1 <= P <= 1,000,000,x_{n+1}\leq 10^6,max(a_i)\leq 100\)。
解
对于是否可以满足,显然从从右往左扫描,模拟一下即可。
考虑贪心,从右往左扫描,位置当前为x,显然对于现在所有的油量p,可以到达的范围为\([p-x,p]\),接下来我要走的更远,然后就能保证加油次数最少,显然需要取得这个位置范围中油量最大的加油站,设其有油量\(a\),然后可以到达的范围就变为\([p-x-a,p]\),然后\(++ans\),如果原点被这个范围所包括,那么就可以输出答案。
这样就得到一个\(O(n^2)\)做法,显然对于范围中最大的加油站不能暴力扫描,我们可以利用堆动态维护她,然后就可以做到\(nlog(n)\)。
参考代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#define il inline
#define ri register
#define Size 15000
using namespace std;
template<class free>
struct heap{
	free a[Size];int n;
	il void push(free x){
		a[++n]=x;ri int p(n);
		while(p>1)
			if(a[p]>a[p>>1])
				swap(a[p>>1],a[p]),
					p>>=1;
			else break;
	}
	il void pop(){
		a[1]=a[n--];ri int p(1),s(2);
		while(s<=n){
			if(s<n&&a[s+1]>a[s])++s;
			if(a[s]>a[p])
				swap(a[s],a[p]),
					p=s,s<<=1;
			else break;
		}
	}
};
struct stop{
	int x,p;
	il bool operator<(const stop&a){
		return p>a.p;
	}
}s[Size];
heap<int>H;
il void read(int&);
il bool comp(const stop&,const stop&);
int main(){
	int n;read(n);
	for(int i(1);i<=n;++i)
		read(s[i].x),read(s[i].p);
	sort(s+1,s+n+1,comp);
	int x,p,ans(-1);read(x),read(p),H.push(p);
	while(true){
		if(!H.n)break;
		x-=H.a[1],++ans,H.pop();if(x<=0)break;
		while(s[n].x>=x&&n)H.push(s[n].p),--n;
	};
	if(x>0)puts("-1");
	else printf("%d",ans);
	return 0;
}
il bool comp(const stop&a,const stop&b){
	return a.x<b.x;
}
il void read(int &x){
	x^=x;ri char c;while(c=getchar(),c<'0'||c>'9');
	while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=getchar();
}
												
											Expedition的更多相关文章
- POJ 2431 Expedition(优先队列、贪心)
		
题目链接: 传送门 Expedition Time Limit: 1000MS Memory Limit: 65536K 题目描述 驾驶一辆卡车行驶L单位距离.最开始有P单位的汽油.卡车每开1 ...
 - POJ 2431 Expedition(探险)
		
POJ 2431 Expedition(探险) Time Limit: 1000MS Memory Limit: 65536K [Description] [题目描述] A group of co ...
 - poj 2431 Expedition
		
Expedition Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12980 Accepted: 3705 Descr ...
 - POJ 2431 Expedition (STL 优先权队列)
		
Expedition Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8053 Accepted: 2359 Descri ...
 - Expedition(优先队列)
		
Expedition 点我 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9465 Accepted: 2760 Des ...
 - poj 3431 Expedition 优先队列
		
poj 3431 Expedition 优先队列 题目链接: http://poj.org/problem?id=2431 思路: 优先队列.对于一段能够达到的距离,优先选择其中能够加油最多的站点,这 ...
 - CF1091F New Year and the Mallard Expedition
		
题目地址:CF1091F New Year and the Mallard Expedition 题意比较复杂,整理一下: \(n\) 段,每段有两个属性:长度,地形(G,W,L) 有三种运动方式: ...
 - H - Expedition  优先队列 贪心
		
来源poj2431 A group of cows grabbed a truck and ventured on an expedition deep into the jungle. Being ...
 - Planning The Expedition(暴力枚举+map迭代器)
		
Description Natasha is planning an expedition to Mars for nn people. One of the important tasks is t ...
 - POJ 2431    Expedition      (优先队列+贪心)
		
题目链接 Description A group of cows grabbed a truck and ventured on an expedition deep into the jungle. ...
 
随机推荐
- 在eclipse中添加svn插件
			
1.点击菜单栏中的help选项,然后选择Install New Software,然后点击ADD,输入: name:subclipse url:http://subclipse.tigris. ...
 - 图解SSH原理_20190613
			
SSH仅仅是一协议标准,其具体的实现有很多,既有开源实现的OpenSSH,也有商业实现方案.使用范围最广泛的当然是开源实现OpenSSH. 2. SSH工作原理 在讨论SSH的原理和使用前,我们需要分 ...
 - Tmux 中开启鼠标选择与复制
			
在 tmux.conf 中加入下列设置(tmux 2.1 之前的版本): set -g mode-mouse on set -g mouse-resize-pane on set -g mouse-s ...
 - ubuntu 搜狗输入法内存占用太多,卡顿不够处理办法
			
1. 输入 free -m 查看是否内存不够导致卡顿 2. 输入 gnome-system-monitor 打开ubuntu 任务管理器 找到搜狗输入法结束进程 3. 完美解决
 - HumanNet v2:用于疾病研究的人类基因网络 X科研网
			
HumanNet v2:用于疾病研究的人类基因网络人类基因网络已被证明在疾病研究的许多方面都很有用,已经开发了许多基于网络的策略来产生关于基因 - 疾病 - 药物关联的假设.预测和组织与特定疾病最相关 ...
 - 使用Intent实现Activity之间传值与跳转(转)
			
转:http://blog.csdn.net/cjjky/article/details/6337447 在一个Android的应用程序中,很少只存在一个Activity,一般都有多个Activity ...
 - 队列Queue--数组实现
			
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插入操作的端称为队尾,进行删除操作的 ...
 - Tomcat_startup
			
@echo off echo 执行开始时间 date/t time/t echo *********************************************** echo 清除Tomc ...
 - Eclipes 配置src.zip(查看源代码)
			
接着将这些改变应用,重启eclipes即可.
 - 免费服务器AWS免费使用一年详细教程
			
AWS免费使用详细教程 福利,亚马逊AWS免费试用一年,简直是爽歪歪.无论是搭建网站,还是自建**,都是不错的选择.详细如下: 开始准备:信用卡一张. 详细视频教程见:http://v.youku.c ...