标签:
题目大意:一个洞穴的宽度为n(n<=10^6)个片段组成。第i处的地面高度为pi,顶高度为si(0=<pi<si<=1000),要求在洞中存放尽量多的燃料(液体),使得燃料的位置不会碰到顶,但可以无限接近。
解题思路:设每个片段中燃料的高度为l,初始值为是s[0]或s[n-1],如果当前片段的地面高度pi>l,则l=pi,顶高度si<l,则l=si,把每个片段的l存在数组中。从右往左扫一遍,再从左往右扫一遍,最后用片段中较小的l减去pi即该片段的燃料,所有相加,即为所求。
#include <cstdio>
#include <algorithm>
using namespace std;
int n, p[1000010], s[1000010], h[1000010];
int main() {
int Z;
scanf("%d", &Z);
while (Z--) {
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%d", &p[i]);
for (int i = 0; i < n; i++)
scanf("%d", &s[i]);
int level = s[0];
for (int i = 0; i < n; i++) {
if (level > s[i]) level = s[i];
if (level < p[i]) level = p[i];
h[i] = level;
}
level = s[n-1];
int ans = 0;
for (int i = n - 1; i >= 0; i--) {
if (level > s[i]) level = s[i];
if (level < p[i]) level = p[i];
ans += min(level, h[i]) - p[i];
}
printf("%d\n", ans);
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/kl28978113/article/details/47378295