Luogu P1187 3D模型
阿新 • • 發佈:2018-04-06
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模型