UVA1442_Cave
Cave
大致题意:
一个洞穴,已经i位置地面高度和顶的高度,要求在这个洞穴里面储蓄尽可能多的燃料,而且任何位置燃料不能碰到顶点
思路:
先从左往右扫描一下得出每一个点燃料能达到的最大高度,然后右边一样扫一遍,两个取最小值,然后累加
看起来很简单,可是实践起来很麻烦,需要讨论好不同条件下的最大高度!!!!
首先我们假设一个位置左端的最大高度为h
那么i+1位置地面高度p,顶点高度是s.
如果p>h,说明燃料被阻断!!!i+1位置上最大高度为自己!!!
如果s<h,说明当前最大高度还是h
如果p<h,最大高度和之前相同
反正扫描一下,就好了,这样充分保证了一个点左右均合法了!!!!
这个和以前遇到的最大长方形面积很相似
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<queue>
#include<cstdlib>
#include<algorithm>
#include<stack>
#include<map>
#include<queue>
#include<vector> using namespace std;
const int maxn = 1e6+100;
#define pr(x) cout << #x << " = " << x << " ";
#define prln(x) cout << #x << " = " << x <<endl;
#define ll long long
int p[maxn], s[maxn], h[maxn], lev, ans, n;
int main(){
#ifdef LOCAL
freopen("C:\\Users\\User Soft\\Desktop\\in.txt","r",stdin);
//freopen("C:\\Users\\User Soft\\Desktop\\out.txt","w",stdout);
#endif
int t; cin >> t;
while(t--) {
cin >> n;
ans = 0;
for(int i = 0; i < n; ++i) scanf("%d", p +i);
for(int i = 0; i < n; ++i) scanf("%d", s +i);
lev = s[0];
for(int i = 0; i < n; ++i) {
if(lev < p[i]) lev = p[i];
if(lev > s[i]) lev = s[i];
h[i] = lev;
}
lev = s[n-1];
for(int i = n-1; i >= 0; --i) {
if(lev < p[i]) lev = p[i];
if(lev > s[i]) lev = s[i];
ans += min(lev, h[i]) - p[i];
}
cout << ans << endl;
}
return 0;
}
UVA1442_Cave的更多相关文章
随机推荐
- 2019 Multi-University Training Contest 1 - 1012 - NTT
题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=6589 题解连接: https://www.cnblogs.com/xusirui/p/1122945 ...
- Codeforces - 1194B - Yet Another Crosses Problem - 水题
https://codeforc.es/contest/1194/problem/B 好像也没什么思维,就是一个水题,不过蛮有趣的.意思是找缺黑色最少的行列十字.用O(n)的空间预处理掉一维,然后用O ...
- 自己实现一个类似 jQuery 的函数库
假如我们有一个需求,需要给元素添加样式类,使用原生的JS很容易搞定. 1 抽取函数 function addClass(node, className){ node.classList.add(cla ...
- 如何用latex画一个简单的表格
latex毫无疑问是一个十分强大的论文写作工具,所以掌握它就显得非常有意义,讲一下如何画一个简单的表格,代码如下: \begin{table}\centering\begin{tabular}{||c ...
- Linux查看关闭进程
ps:进程的静态列表(Process status) - PID:进程号,每个进程独一无二的标识符(关闭进程需要使用) - TTY:终端所属,表明进程产生于哪一个终端,对于多用户使用的Linux服务器 ...
- HDU 5634 线段树
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5634 题意:给定一个长度为n的序列,有m次操作.操作有3种: 1 l,r :区间[l,r]的值变成ph ...
- Switch能否用String类型做参数?
switch(expr): 其中,expr参数可以是一个枚举常量(由整型或字符类型实现)或一个整数表达式,其中整数表达式可以是基本类型int或其包装类Integer.由于byte.short和char ...
- bootz to be continued
dmesgcat /proc/interrupts cat /proc/meminfocat /proc/cpuinfo top bootz 0x10000000 0x12000000 0x11000 ...
- 【抓包工具之Fiddler】中session的请求/响应类型与图标对照表
- Echarts 自定义数据视图
toolbox : { show : true, feature : { dataView : { optionToContent : function(option) { // 行名称 var ax ...