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.}