积水面积

题目描述

一组正整数,分别表示由正方体叠起的柱子的高度。若某高度值为x,表示由x个正立方的方块迭起(如下图,0<=x<=5000)。找出所有可能积水的地方(图中蓝色部分),统计它们可能积水的面积总和(计算的是图中的横截面积。一个立方体的位置,为一个单位面积)。

如图:柱子高度变化为 0 1 0 2 1 2 0 0 2 0

图中蓝色部分为积水面积,共有6个单位面积积水。

输入格式

两行,第一行n,表示有n个数(3<=n<=10000)。第2行连续n个数表示依次由正方体迭起的高度,保证首尾为0。

输出格式

一个数,可能积水的面积。

输入输出样例

输入 #1

10
0 1 0 2 1 2 0 0 2 0

输出 #1

6【解题思路】一道模拟题找出两边最大值里的最小值来判断,去除当前的砖块高度就可以得到一列的水高【code】
 1 #include <cstdio>
 2 #include <iostream>
 3 #include <algorithm>
 4 using namespace std;
 5 int n,a[10005],ans,l[10005],r[10005];
 6 inline int Max(int a,int b){
 7     return a>b?a:b;
 8 }
 9 inline int Min(int a,int b){
10     return a<b?a:b;
11 }
12 int main(){
13     //freopen("1011.in","r",stdin);
14     //freopen("1011.out","w",stdout);
15     scanf("%d",&n);
16     for(register int i=1;i<=n;i++){
17         scanf("%d",&a[i]);
18         l[i]=Max(l[i-1],a[i]);
19     }
20     for(register int i=n;i>=1;i--)
21          r[i]=Max(r[i+1],a[i]);
22     for(register int i=1;i<=n;i++){
23         if(Min(l[i],r[i])<a[i])continue;
24         else ans+=min(l[i],r[i])-a[i];
25     }
26     printf("%d\n",ans);
27     return 0;
28 }

原文地址:https://www.cnblogs.com/66dzb/p/11515483.html

时间: 2024-11-07 22:11:02

积水面积的相关文章

洛谷 P1318 积水面积

P1318 积水面积 将每层可积水的面积加起来 每层可积水的面积=左边第一个比他大右边的所有空位+右边第一个比他大的左边的所有空位-这一层的所有空位(他指当前高度 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define maxn 1000000 4 5 int n,h[maxn],tot,maxx; 6 int l[maxn],r[maxn],ans; 7 bool if_; 8 char ch; 9 inline void rea

算法实现柱形集合积水面积

用一个数组代表柱形墙的的高度.当下雨的时候柱形墙能积水的体积是多少 下面是python的实现算法: # -*- coding: utf-8 -*- def savewater(arr): point_l=0 max_l=arr[0] point_r=len(arr)-1 max_r=arr[len(arr)-1] volume=0 #point_l从左向右遍历,point_r从右向左遍历 while point_l<point_r: #能积水的标准时两边的高度大于中间的 if max_l<ma

GDUT 积木积水(栈)

题意 Description 现有一堆边长为1的已经放置好的积木,小明(对的,你没看错,的确是陪伴我们成长的那个小明)想知道当下雨天来时会有多少积水.小明又是如此地喜欢二次元,于是他把这个三维的现实问题简化成二维的问题.设雨量无穷.积木不透水.积木间无缝连接,问在这个二次元的世界里,已放置好的积木会有多少单位的积水量? Input 第一行包含一个整数T(T≤100),表示接下来的测试样例个数. 每个测试样例有两行组成: 第一行包含一个整数N(N≤1e6),表示积木的列数: 第二行包含N个整数Ai

【poi1999】【cogs239】【积水】【堆】【灌水法】【贪心】

问题描述 有这样一块土地,它可以被划分N*M个正方形小块,每块面积是一平方英寸,第i行第j列的小块可以表示成P(i,j).这块土地高低不平,每一小块地P(i,j)都有自己的高度H(i,j)(单位是英寸). 一场倾盆大雨后,由于这块地地势高低不同,许多低洼地方都积存了不少降水.假如你已经知道这块土地的详细信息,你能求出它最多能积存多少立方英寸的降水么? 输入格式 输入文件的第一行是两个正整数n和m,1<=n<=100,1<=m<=100,表示土地的尺寸.下面n行,每行m个整数(1..

要求用户输入宽和高,显示出长方形的面积。

import java.util.Scanner; /** * @author 蓝色以太 * 要求用户输入宽和高,显示出长方形的面积. */ public class Area { public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("请输入长度:"); double length=sc.nextDouble(); System.out.printl

输入一个半径求圆的面积和周长

Scanner sc = new Scanner(System.in); System.out.print("请输入半径"); int r =sc.nextInt(); final double π = 3.14; System.out.print("面积为:"+(π*r*r)); System.out.print("周长为:"+(π*r*2));

【POJ 1408】 Fishnet (叉积求面积)

[POJ 1408] Fishnet (叉积求面积) 一个1*1㎡的池塘 有2*n条线代表渔网 问这些网中围出来的最大面积 一个有效面积是相邻两行和相邻两列中间夹的四边形 Input为n 后面跟着四行 每行n个浮点数 每一行分别代表a,b,c,d 如图 并且保证a(i) > a(i-1) b(i) > b(i-1) c(i) > c(i-1) d(i) > d(i-1) n(n <= 30)*2+4(四个岸)条边 枚举点数就行 相邻的四个四个点枚举 找出围出的最大面积 找点用

codeforces1c给出三点求面积

题意:有一个正n边形的斗兽场,现存有3根柱子,柱子位于正n边形的任意3个节点上.求出正n边形的最小面积. 1 #include <iostream> 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <math.h>//采用三角函数大部分使用弧度 5 #include <utility> 6 #include <algorithm> 7 using namespace std;

POJ 2546 &amp; ZOJ 1597 Circular Area 两圆的面积交

Circular Area Time Limit: 2 Seconds      Memory Limit: 65536 KB Your task is to write a program, which, given two circles, calculates the area of their intersection with the accuracy of three digits after decimal point. Input In the single line of in