题目链接:http://bailian.openjudge.cn/practice/4074/
老实说我都不知道这道题考的是什么知识点,就这么莫名其妙AC了,方法是通过统计每一层不能积水的方块,然后用每一层的起始到终止的距离减去不能积水的方块,由此得到积水量,美中不足题目中没有说明路面高度的限制所以就随便开了个数组,这是我看着最不爽的地方,希望能找到更好的算法。AC代码如下:
#include <stdio.h>
#include <string.h>
int main (){
int floor[20001];
int ans;
int sum[1001];
int m,n,flag,begin,end,cnt;
scanf("%d", &m);
while(m--){
ans=0;
memset(floor,0,sizeof(floor[20001]));
scanf("%d", &n);
for(int i=0;i<n;i++){
scanf("%d", &floor[i]);
}
for(int i=1;i<=1000;i++){
flag=0;
begin=0;
end=0;
cnt=0;
memset(sum,0,sizeof(sum[1001]));
for(int j=0;j<n;j++){
if(flag==0){
if(floor[j]>=i){
flag=1;
cnt++;
begin=j;
}
}else{
if(floor[j]>=i){
cnt++;
end=j;
}
}
}
if(end==0)
sum[i]=0;
else
sum[i]=end-begin-cnt+1;
}
for(int i=1;i<=100;i++){
ans+=sum[i];
}
printf("%d\n", ans);
}
return 0;
}