SRM415 Div2 500

問題

NxNxNの立方体が1x1x1の小さな立方体に分解される。そして、いくつかの小さな立方体を取り除く。
ただし、3枚の写真(xy面,xz面,yz面から撮ったもの)が与えられる。写真で'Y'となっている場所は少なくとも1つはなくてはならない。'N'は、そうでない場合。その3枚の写真の整合性を保ったまま小さな立方体を取り除く場合、いくつの小さな立方体を取り除くことができるか。写真の整合性を保つような取り除き方がない場合は-1を返す。

考え方

まず立方体の情報を保持する配列を用意する(すべて0で初期化)。
写真で'N'の場所は(逆に考えると)一つもブロックを置いてはならないので、そこは-1などとしておく。
そして各写真について、'Y'のところは必ず1つ以上はブロックがないといけないので、その列で0以上の場所を+1する。
また、すべてが-1になっている場所があれば整合性が保てないので-1を返す。


整合性が保てる場合は、今残っているブロックをさらに取り除くようにする。
小さいキューブについてそこの値が大きいほど残したほうがいいブロックと見ることができるので、各値が1,2,3の順番でそのキューブを取り除けるかをチェックして取り除ける場合は取り除く(0などとしておく)。
最後にキューブの中で値が-1,0のところは取り除くことができるので、その個数を返す。