【精進記録】AtCoder Regular Contest 091 C - Flip,Flip, and Flip......
問題
解法
解法を思いつくまでにそこそこ時間がかかった&コーナーケースで躓いたけどなんとか解説を見ずにAC.
N = 1かつM = 1 の場合は1,N = 1 かつM ≠ 1の場合は(M-2),M = 1かつN ≠ 1の場合は(N-2)となる.
この場合以外のN ≧ 2 かつM ≧ 2の場合,裏返す回数を数えると四隅が4回,四隅を除く辺部分が6回,それ以外のカードは9回裏返されることになるため,9回裏返されるカードの数を数えれば良い.
9回裏返される部分は外周以外のカードなので,(N-2)*(M-2)となる.
裏返す回数を図示してみることで解法に気づくことができた.
ただ,提出したコードでは無駄にN = 2またはM = 2の場合の条件も書いてしまった.
図示して検討したパターン
コード
N,M = map(int,input().split()) if N == 2 or M == 2: print(0) exit() if N == 1: if M == 1: print(1) else: print(M-2) exit() if M == 1: print(N-2) exit() print((N-2)*(M-2))
コメント
前回の問題でも思ったが,わからない場合はとにかく図示してみるのが有効そう.