-
数学题(立方体堆叠表面积)HDU 5538-House Building
-
题目链接:
-
思路:
题目大意:
以“我的世界”这款游戏为背景,给定建筑面积 n,m ,及每个单位立方体的个数(也就是高度),求建筑表面积
题解 :
首先,俯视图的面积是一定的
侧面积,对每个立方体扫描,定义方向向量扫相邻4个立方体,如果周围某个立方体低于中间立方体,那么中间立方体的那个方向上的侧面积可以算。
-
代码:
#include<iostream>
#include<memory.h>
using namespace std;
#define MAX_SIZE 60
int Direct[5][2]={{0,0},{-1,0},{1,0},{0,-1},{0,1}};
int Map[MAX_SIZE][MAX_SIZE];
int main()
{
int T,n,m;
cin>>T;
while(T--)
{
int Area=0;
memset(Map,0,sizeof(Map));
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>Map[i][j];
if(Map[i][j])
Area++;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
for(int k=1;k<=4;k++)
{
if(Map[i][j]>Map[i+Direct[k][0]][j+Direct[k][1]])
Area+=Map[i][j]-Map[i+Direct[k][0]][j+Direct[k][1]]; //差值侧面积
}
}
}
cout<<Area<<endl;
}
return 0;
}