#include #define CHESS_BOARD_SIZE 20010 char chessboard[CHESS_BOARD_SIZE][CHESS_BOARD_SIZE]; void nullArray(int x, int y){ int i, j; for (i = 1; i <= x; i++) { for (j = 1; j <= y; j++) { chessboard[i][j] = 0; } } } int main(int argc, char** argv) { int i, j, x, y, n; int a, b, leftx; int suma; scanf("%d %d %d", &x, &y, &n); while (x+y+n > 1) { suma = x*y; if (n > 0){ nullArray(x, y); } while (n--) { scanf("%d %d", &a, &b); /* zakazuju cely radek */ for (i = 1; i <= y; i++) { if (chessboard[a][i] == 0) { chessboard[a][i] = 1; suma--; } } /* zakazuju cely sloupec */ for (i = 1; i <= x; i++) { if (chessboard[i][b] == 0) { chessboard[i][b] = 1; suma--; } } /* zakazuju celou diagonalu zleva shora */ leftx = (a < b) ? a : b; for (i = a-leftx+1, j = b-leftx+1; i <= x && j <= y; i++, j++) { if (chessboard[i][j] == 0) { chessboard[i][j] = 1; suma--; } } /* zakazuju celou diagonalu zprava shora */ leftx = (a < y-b+1) ? a : y-b+1; leftx--; for (i = a-leftx, j = b+leftx; i <= x && j > 0; i++, j--) { if (chessboard[i][j] == 0) { chessboard[i][j] = 1; suma--; } } } /* for (i = 1; i <= x; i++) { for (j = 1; j <= y; j++) { printf("%d ", chessboard[i][j]); } printf("\n"); } */ printf("%d\n", suma); scanf("%d %d %d", &x, &y, &n); } return 0; }