题目大意:
一座城市建立在规则的n×m网格上,并且网格均由1×1正方形构成。在每个网格上都可以有一个建筑,建筑由若干个1×1×1的立方体搭建而成。
现在给出每个网格上建筑的高度,即每个网格上建筑由多少个立方体搭建而成,要求这个建筑模型的表面积是多少。
20%的数据满足:n, m≤10;
40%的数据满足:n, m≤100;
100%的数据满足:n, m≤1000。
所有建筑高度都大等于0且小等于9
题解:
枚举位置,判断这里是否有立方体,有就加上上下的面积2,然后枚举高度判断4周是否被遮掩
时间复杂度:O(40NM)
代码:
const
dx:array [1..4] of longint=(-1,1,0,0);
dy:array [1..4] of longint=(0,0,-1,1);
var
rp:array [0..1001,0..1001] of longint;
i,j,k,l,n,m,ans:longint;
c:char;
begin
readln(n,m);
for i:=1 to n do
begin
for j:=1 to m do
begin
read(c);
rp[i,j]:=ord(c)-48;
end;
readln;
end;
for i:=1 to n do
for j:=1 to m do
if rp[i,j]<>0 then
begin
ans:=ans+2;
for k:=1 to rp[i,j] do
for l:=1 to 4 do
if rp[i+dx[l],j+dy[l]]<k then inc(ans);
end;
writeln(ans);
end.