题意:
看起来很长…就是告诉一个立体在二维平面上,每一个方格的高度,求这个立体的表面积…
思路:
对于每一个方格,与上下左右的方格高度进行比较,较大,就加上差值,即为表面积。每一个高度大于等于1的方格再加上顶面的1.
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int map[55][55];
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int main(){
int T,n,m;
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
memset(map,0,sizeof(map));
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf("%d",&map[i][j]);
}
}
int ans=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(map[i][j])
ans++;
for(int w=0;w<4;w++){
int xt = i+dir[w][0];
int yt = j+dir[w][1];
int all = map[i][j]-map[xt][yt];
if(all>0)
ans+=all;
}
}
}
printf("%d\n",ans);
}
return 0;
}