百炼:(4074)积水量

4074:积水量

    总时间限制:
    1000ms
    内存限制:
    65536kB
    描述

    凹凸不平的地面每当下雨的时候总会积水。假设地面是一维的,每一块宽度都为1,高度是非负整数,那么可以用一个数组来表达一块地面。

    例如[0,1,0,2,1,0,1,3,2,1,2,1]可以用来表示下图地面:


    当下过雨后,地面就会积水,上图中蓝色的区域就是积水区域。现在给你一个数组表示地面,求下过雨后这块地面有多少积水量(假设不蒸发、不渗透)。

    输入
    第一行是一个整数m,表示有m组试样例,不超过100。
    接下来m块,每块第一行是一个正整数n,表示地面总宽度(数组长度),不超过20000。
    接下来一行是n个整数,用空格隔开,表示地面高度。
    输出
    对于每组输入,输出一个整数表示积水量。
    样例输入
    2
    12
    0 1 0 2 1 0 1 3 2 1 2 1
    4
    1 0 0 2
    样例输出
    6
    2
    代码:
    1.#include<iostream>
    2.using namespace std;
    3.int main()
    4.{
    5. int n;cin>>n;
    6. while(n--)
    7. {
    8.  int a[2001],i,j,k=0,l,all=0,m;
    9.  cin>>m;
    10.  for(i=0;i<m;i++)
    11.   cin>>a[i];
    12.  int a1=a[0];
    13.  for(i=1;i<m;i++)
    14.  {
    15.   if(a1<a[i]){a1=a[i];k=i;}
    16.  }
    17.  a1=a[0];
    18.  for(i=1;i<k;i++)
    19.  {
    20.   if(a1>a[i])all+=a1-a[i];
    21.   if(a1<a[i])a1=a[i];
    22.  }
    23.  a1=a[m-1];
    24.  for(i=m-2;i>k;i--)
    25.  {
    26.   if(a1>a[i])all+=a1-a[i];
    27.   if(a1<a[i])a1=a[i];
    28.  }
    29.  cout<<all<<endl;
    30. }
    31. return 0;
    32.}
    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 0
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值