您的位置:首页 > 其它

sgu - 519 - 3D City Model

2013-08-13 00:36 148 查看
题意:给出一个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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: