UVa11231 Black and white painting

問題
http://uva.onlinejudge.org/external/112/11231.html

概要
大きな市松模様のうち、8×8の市松模様はいくつあるか。

解法
(実はまだよく分かってない)

#include <bits/stdc++.h>
using namespace std;
 
int countChessBoard(int n, int m)
{
  n -= 7, m -= 7;
  if(n < 1 || m < 1) return 0;
   
  return (n/2 + n%2) * (m/2 + m%2);
}
 
int main()
{
  int n, m, c;
  while(cin >> n >> m >> c && (n|m|c)) {
    if(c) { // white
      cout << countChessBoard(n, m) + countChessBoard(n-1, m-1) << endl;
    }
    else {
      cout << countChessBoard(n-1, m) + countChessBoard(n, m-1) << endl;
    }
  }
   
  return 0;
}