sgu - 519 - 3D City Model

题意:给出一个n*m的矩阵,也是由1*1*1的小立方体组成的几何体的俯视图,求这个几何体的表面积(1 <= n, m <= 100)。

题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=519

——>>原想分角、边、中间3部分求,不过写着写着即发现,自己想复杂啦,可以不分类,一起求。

对于矩阵中的每一个元素,求与其上、下、左、右的高度差,这个差值就是能看见的正侧面,求完后加上顶面的1个和底面的1个。最后求总和即是表面积。

测试时发现,输入不对头,才发现,矩阵元素之间没空格,就猜想矩阵元素的高度是个1位数,结果还真是!

#include <cstdio>
#include <cstring>

using namespace std;

const int maxn = 100 + 10;
int n, m, G[maxn][maxn];

int main()
{
    int i, j, u, d, l, r;
    char c;
    while(scanf("%d%d", &n, &m) == 2){
        memset(G, 0, sizeof(G));
        for(i = 1; i <= n; i++){
            getchar();
            for(j = 1; j <= m; j++){
                c = getchar();
                G[i][j] = (int)(c - '0');
            }
        }
        int ret = 0;
        for(i = 1; i <= n; i++)
            for(j = 1; j <= m; j++) if(G[i][j]){
                u = G[i][j] - G[i-1][j];
                d = G[i][j] - G[i+1][j];
                l = G[i][j] - G[i][j-1];
                r = G[i][j] - G[i][j+1];
                if(u > 0) ret += u;
                if(d > 0) ret += d;
                if(l > 0) ret += l;
                if(r > 0) ret += r;
                ret += 2;
            }
        printf("%d\n", ret);
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值