#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef unsigned int uint; typedef unsigned char uchar; typedef unsigned long long ulonglong; bool hasInput(); void readInput(); void calculate(); void writeOutput(); void reset(); uint X = 0,Y = 0,N = 0, result = 0; vector rows, cols, downDiags, upDiags; #define ROW(y) (y-1) #define COL(x) (x-1) #define DOWNDIAG(x,y,Y) (x-y+Y-1) #define UPDIAG(x,y) (x-1+y-1) int main(int argc, char **argv) { while (true) { reset(); if (!hasInput()) break; readInput(); calculate(); writeOutput(); } return 0; } void reset() { X = Y = N = result = 0; } bool hasInput() { cin >> X >> Y >> N; return !(X == 0 && Y == 0 && N == 0); } void readInput() { rows.resize(Y, false); cols.resize(X, false); downDiags.resize(X+Y-1, false); upDiags.resize(X+Y-1, false); for (uint q = 0; q < N; ++q) { uint x, y; cin >> x >> y; rows[ROW(y)] = true; cols[COL(x)] = true; downDiags[DOWNDIAG(x,y,Y)] = true; upDiags[UPDIAG(x,y)] = true; } } void calculate() { result = 0; for (uint x = 1; x <= X; ++x) { for (uint y = 1; y <= Y; ++y) { if (!rows[ROW(y)] && !cols[COL(x)] && !downDiags[DOWNDIAG(x,y,Y)] && !upDiags[UPDIAG(x,y)]) ++result; } } } void writeOutput() { cout << result << endl; }