House Building---hdu5538(求表面积水题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5538

题意:有一个三维的图形,先给出平面图是n*m的矩形,每个位置都有不同个数的方块,a[i][j]代表当前位置有a[i][j]个方块,就是高度;现要求三维图形的表面积,方块的边长为1;

简单的水题,直接看一下每个位置的方块有几个面可以漏出来就可以了;

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>
#include<set>
using namespace std;
#define met(a, b) memset(a, b, sizeof(a))
#define N 105
#define INF 0x3f3f3f3f
typedef long long LL;

int dir[4][2] = { {1,0}, {-1,0}, {0,1}, {0,-1} };
int a[N][N];

int main()
{
    int T, n, m;
    LL ans;
    scanf("%d", &T);
    while(T--)
    {
        met(a, 0);
        scanf("%d %d", &m, &n);
        for(int i=1; i<=m; i++)
        {
            for(int j=1; j<=n; j++)
                scanf("%d", &a[i][j]);
        }
        ans = 0;
        for(int i=1; i<=m; i++)
        {
            for(int j=1; j<=n; j++)
            {
                if(a[i][j] == 0)continue;
                ans += 1;///最上层的一个;
                for(int k=0; k<4; k++)
                {
                    int x = i+dir[k][0];
                    int y = j+dir[k][1];
                    ans += max(0, a[i][j] - a[x][y]);
                }
            }
        }
        printf("%I64d
", ans);
    }
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/zhengguiping--9876/p/5876532.html