// // Solution Program for Problem C of Aizu 2003 // written by IZUMI Yusuke // #include #include #include #include #include using namespace std; deque< pair > range[4000]; void add_edge(int px, int py, int qx, int qy) { int dx = qx - px, dy = qy - py; if(dx < 0) { dx = -dx, dy = -dy; } for(int x = min(px,qx); x < max(px,qx); x++) { int y1 = dy * (x - px) + dx * py; int y2 = dy * (x+1 - px) + dx * py; if(y1 > y2) swap(y1, y2); y1 = (y1 < 0 ? y1 - dx + 1 : y1) / dx; y2 = (y2 < 0 ? y2 : y2 + dx - 1) / dx; range[x+2000].push_back(make_pair(y1, y2)); } } int main(void) { ifstream cin("area.txt"); int n; while(cin >> n) { if(n == 0) break; // input int px, py, qx, qy, sx, sy; cin >> sx >> sy; px = sx, py = sy; for(int i = 1; i < n; i++) { cin >> qx >> qy; add_edge(px, py, qx, qy); px = qx, py = qy; } add_edge(px, py, sx, sy); // computation int S = 0; for(int x = 0; x < 4000; x++) { sort(range[x].begin(), range[x].end()); int th = -2000; // threshold for(int i = 0; i < range[x].size(); i += 2) { S += range[x][i+1].second - max(th, range[x][i].first); th = range[x][i+1].second; } range[x].clear(); } // output cout << S << endl; } return 0; }