トピックリンク:三次元の体表面積
質問の意味: N * Nグリッド上で、我々はいくつかのキューブに* 1 * 1 1を入れました。
各値v =グリッド[i] [j]は、対応するセル(i、j)の上に重ねVキューブを表します。
最終体表面積に戻ってください。
ソリューション:私は、この問題が読むためにタイトルを取ることであると感じています。。。
図1に示すように、各グリッド上のキューブがある場合。キューブがある場合は、計算は、4つの立方体の円が数+ 2 *(2上部及び底部の両方)対向しています
図2は、立方体の正面、マイナス任意のオーバラップ領域(ある、2つの重複する面が重なるように、隠されている数* 2)かどうかを検討します
図3に示すように、左キューブ、マイナス任意のオーバラップ領域があるかどうかを検討する(すなわち、2つの重複する面が隠されているので、重複数* 2)
彼は例最初の2つの例を描きました。。(ソウル手描き、5555)
コード:
1 クラスソリューション{ 2 公共: 3 INT表面積(ベクトル<ベクトル< INT >>&グリッド){ 4 int型の行= grid.size()。 5 INT COL =グリッド[ 0 ] .size()。 6 INT ANS = 0 。 7 のための(INT iが= 0 ; I <行; I ++ ){ 8 のための(INT J = 0 ; J <COL; J ++ ){ 9 もし(グリッド[I] [J]){ 10 + = ANS [I]、[J] *グリッド。4 + 2 ; // アップスタック 11 // 立方体の正面 12は、 IFは、(I> 0 ){ 13は ANS - =分(グリッド[I- 1 ] [J]グリッド[I] [J])* 2 ; 14 } 15 // 左キューブ 16 IF(J> 0 ){ 17 ANS - =分(グリッド[I]、[J- 1 ]、グリッド[I] [J] )* 2 ; 18 } 19 } 20 } 21 } 22 リターン年。 23 } 24 }。