#include #include #include #include #include #include using namespace std; #define foreach(T, p, c) for(T p = (c).begin(); p != (c).end(); ++p) typedef pair point; #define XX first #define YY second double SUnit[4]; vector V; double size(int x, int y, int vx, int vy){ bool X[4]; int cnt = 0; X[0] = false; X[1] = false; X[2] = false; X[3] = false; int r = ((vx == 1) ? 1 : 0); int b = ((vy == 1) ? 1 : 0); int l = 1 - r; int t = 1 - b; foreach(vector::iterator, q, V){ if (q->XX == x + l && q->YY == y + t){ X[0] = true; cnt++; }else if(q->XX == x + l && q->YY == y + b){ X[1] = true; cnt++; }else if(q->XX == x + r && q->YY == y + t){ X[2] = true; cnt++; }else if(q->XX == x + r && q->YY == y + b){ X[3] = true; cnt++; } } if(cnt == 0){ //cout << SUnit[0] << endl; return SUnit[0]; }else if(cnt == 1){ //cout << SUnit[1] << endl; return SUnit[1]; }else if(cnt >= 3){ // cout << r << "," << b << "," << cnt << endl; //cout << SUnit[3] << endl; return SUnit[3] / cnt; }else if(X[0] && X[3]){ //cout << SUnit[3] << endl; return SUnit[3] / cnt; }else if(X[1] && X[2]){ //cout << SUnit[3] << endl; return SUnit[3] / cnt; }else{ //cout << SUnit[2] << endl; return SUnit[2] / cnt; } } int main(){ int N; SUnit[0] = 0.0; SUnit[1] = M_PI / 4.0; SUnit[2] = (M_PI / 6.0) + (sqrt(3.0) / 4.0); SUnit[3] = 1.0; ifstream cin("circle.txt"); for(int iii=1; cin >> N ; iii++){ if(N == 0){ break; } V.clear(); for(int i=0; i> x >> y; V.push_back(make_pair(x,y)); } double S = 0; foreach(vector::iterator, p, V){ // cout << "#" << p->XX << p->YY << endl; S += size(p->XX-1, p->YY-1, 1, 1); S += size(p->XX-1, p->YY, 1, 0); S += size(p->XX, p->YY-1, 0, 1); S += size(p->XX, p->YY, 0, 0); } if(iii > 1){ printf("\n"); } printf("Data set #%d: Total area = %.4f square meters.\n", iii, S); } }