解いた問題のソースコードと解説など。


POJ 3364 Black and white painting

問題

n x mの市松模様が与えられる。右下が白の場合はc = 1、黒の場合はc = 0である。
8 x 8のチェスボードはこの中にいくつあるか返せ。

やりかた

チェスボードを模様の中で動かすことを想定すると、チェスボードの左上が動ける範囲は、模様の左上から(n - 7) * (m - 7)の中にある。この中にある白のマスの数を数えればいい。
cの値と(n - 7) * (m - 7)の偶奇によって答えが少し違うので注意。ただ絵を書いてみればすぐわかるはず。

以下ソース。

int main(int argc, char **argv){
  int n, m, c;
  while(cin >> n >> m >> c, n + m + c){
    n -= 7, m -= 7;
    if((n * m) & 1)
      cout << (n * m) / 2 + c << endl;
    else
      cout << n * m / 2 << endl;
  }
}
しょげないでよBaby 眠れば治る