【HDOJ5538】House Building(计算几何)

题意:给定一个n*m的方阵,第i行第j列的高度为a[i][j],问除了下底面之外其余五面的总表面积

n<=50,0<=a[i][j]<=1000

思路:队友写的,抱大腿

考虑当前方格比周围四格高多少即可

 1 #include<cstdio>
 2 #include<cstring>
 3 using namespace std;
 4 #define LL long long  
 5 const int maxn=55;
 6 int a[maxn][maxn];
 7 int dx[4]={1,0,-1,0};
 8 int dy[4]={0,1,0,-1};
 9 int main()
10 {
11     int T;
12     scanf("%d",&T);
13     while(T--)
14     {
15         int n,m;
16         memset(a,0,sizeof(a));
17         scanf("%d%d",&n,&m);
18         for(int i=1;i<=n;i++)
19             for(int j=1;j<=m;j++)
20                 scanf("%d",&a[i][j]);
21         int sum=0;
22         for(int i=1;i<=n;i++)
23             for(int j=1;j<=m;j++)
24             {
25                 if(!a[i][j])
26                     continue;
27                 sum++;
28                 for(int k=0;k<4;k++)
29                 {
30                     int x=dx[k]+i;
31                     int y=dy[k]+j;
32                     if(a[x][y]<a[i][j])
33                         sum+=a[i][j]-a[x][y];
34                 }
35             }
36         printf("%d
",sum);
37     }
38 }
原文地址:https://www.cnblogs.com/myx12345/p/9879252.html