<1>の表面積
N行M列に矩形領域分割のN * Mは長さ1cm(各行の各列の幅は、1センチメートルである)、位置Aiがj列目のi番目の行、jの長辺重畳しました1cmの立方体(1 <= Aijを<= 100 )、 3次元グラフィックスを形成するために、すべてのキューブは、キューブの六面の各々の部分は、別のキューブ、遮蔽されていない部分の総面積をブロックされています3次元グラフィックスの表面積は、固体図形の面積は平方センチメートルの数は?
入力
最初の行は二つの整数NとM.1sN、Ms1000。含ま
そしてN行、iはAJPのの整数を表し、Mの整数、j番目の行を構成する各列
の出力
出力表面積の大きさ。
特殊なケースを入力します。
2 2
2 1
1 1
出力例外:
20
コードは以下の通りであります:
パッケージcom.ymm.core.sanliuling。 インポートjava.util.Scanner; パブリッククラスMian5 { パブリック静的無効メイン(文字列[] args){ =新しいスキャナスキャナ(System.in)。 INT N = in.nextInt()。 INT M = in.nextInt()。 IF(N <= 0 || M <= 0){ System.out.printlnは(0)。 } [] [] =新しいINT [N] [M] int型。 以下のために(INT i = 0; iがNを<; iは++){ ための(int型J = 0であり、j <M、J ++){ [I] [J] = in.nextInt()。 } } のSystem.out.println(カウント(a)参照)。 } プライベート静的int型カウント(INT [] [] ARR){ INT [] = RPW新しいINT [] {0,1,0、-1}。 INT [] RDW =新しいINT [] {1,0、-1,0}。 int型のres = 0; {(; iがarr.lengthを<I ++は、I = 0 INT)のための ための(INT J = 0; J <ARR [0] .LENGTH; J ++){ IF(ARR [I] [J]> 0){ RES + = 2; 以下のために(INT n = 0であり、n <4であり; n ++){ int型のNPは=私はRPW [n]を+。 INT ND = J + RDW [N]。 int型のNRE = 0; (NP> = 0 && NP <arr.length &&なら {ND> = 0 && ND <[0] .LENGTHをARR) のNREの=のARR [NP] [ND]。 } RES + = Math.max(ARR [I] [J] -のNRE、0); } } } } RESを返します。 } }