1. 程式人生 > >Luogu P1187 3D模型

Luogu P1187 3D模型

esp 技術 必須 names 3d模型 輸入輸出格式 建築 cdn 明顯

題目描述

一座城市建立在規則的n×m網格上,並且網格均由1×1正方形構成。在每個網格上都可以有一個建築,建築由若幹個1×1×1的立方體搭建而成(也就是所有建築的底部都在同一平面上的)。幾個典型的城市模型如下圖所示:

技術分享圖片

現在給出每個網格上建築的高度,即每個網格上建築由多少個立方體搭建而成,要求這個建築模型的表面積是多少。

輸入輸出格式

輸入格式:

輸入文件的第1行包含2個正整數n和m,為城市模型的長與寬。

接下來n行,每行m個數字字符,描述了網格每個格子高度(可見所有建築高度都大等於0且小等於9)。

輸出格式:

輸出文件包含一個非負整數,為城市模型的表面積。

輸入輸出樣例

輸入樣例#1:
3 3
111
212
111

輸出樣例#1:
38
輸入樣例#2:
3 4
1000
0010
0000
輸出樣例#2:
12

說明

本題有2個測試數據

20%的數據滿足:n, m≤10;

40%的數據滿足:n, m≤100;

100%的數據滿足:n, m≤1000。


看到許多很牛逼的題解,但都很麻煩,不如我們來換一種思路。

開一個三維數組(因為測試數據很小,高度都小於等於9)。

然後按照輸入,在三位數組裏標記這個點是否存在方塊。

最後每個方塊的六個面都判斷一下,有幾個面是裸露在外的(這個面沒有與另一個方塊相連)。那麽面積就要加上一。

到最後輸出面積。完成。

代碼hhh

#include<cstdio>
#include<iostream>
#include<cstring>

using namespace std;

int a[1003][1003][12];
char b[1003][1003];
int n,m,sum=0;

int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++) {
        for(int j=1;j<=m;j++) {
            cin
>>b[i][j]; b[i][j]-=0; for(int k=1;k<=b[i][j];k++) { a[i][j][k]=1; } } } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { for(int k=1;k<=b[i][j];k++) { if(a[i][j+1][k]==0)sum++; if(a[i][j-1][k]==0)sum++; if(a[i+1][j][k]==0)sum++; if(a[i-1][j][k]==0)sum++; if(a[i][j][k+1]==0)sum++; if(a[i][j][k-1]==0)sum++; } } } cout<<sum; }

作者:wlz 出處:http://www.cnblogs.com/bljfy/p/8728003.html
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

Luogu P1187 3D模型