题目链接:House Building
题目大意:给你一个建筑物,求除开底面的表面积
题目思路:我们按照给定的数据可知,我们判断这个块能贡献多少的表面积,我们需要判断它与周围四个块的高度差, 然后加上自己本身的顶面积就好了
#include <map>
#include <stack>
#include <queue>
#include <cmath>
#include <vector>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn = 105;
int main(){
int T,n,m,matrix[maxn][maxn];
scanf("%d",&T);
while(T--){
int sum = 0,ans;
scanf("%d%d",&n,&m);
memset(matrix,0,sizeof(matrix));
for(int i = 1;i <= n;i++){
for(int j = 1;j <= m;j++){
scanf("%d",&matrix[i][j]);
if(matrix[i][j] != 0) sum++;
}
}
for(int i = 1;i <= n;i++){
for(int j = 1;j <= m;j++){
ans = max(matrix[i][j] - matrix[i-1][j],0)+max(matrix[i][j] - matrix[i][j-1],0)+max(matrix[i][j] - matrix[i+1][j],0)+max(matrix[i][j] - matrix[i][j+1],0);
sum += ans;
}
}
printf("%d\n",sum);
}
return 0;
}