// Maximum-TNT #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define cin fin const int BUFSIZE = 1024; const double ERROR=1e-5; ifstream fin("circle2.txt"); #define cmp_t complex int g_n; vector g_center; bool operator<(pair a,pair b) { return a.first < b.first || (a.first == b.first && a.second < b.second); } double Solve() { set > inside; for(int i = 0 ; i < g_n ; i++) { cmp_t now= g_center[i]; int x = (int)floor(now.real()); int y = (int)floor(now.imag()); for(int j = -100 ; j <= 100 ; j++) for(int k = -100 ; k <= 100 ; k++) { if(abs(now- cmp_t(x+j,y+k)) < 100+ERROR) { inside.insert(make_pair(x+j,y+k)); } } } return ceil(0.01*inside.size())*0.01; } double Solve2() { int count = 0; const int NUM=1000000; for(int i = 0 ; i < NUM ; i++) { double x = (rand()/(double)RAND_MAX)*10; double y = (rand()/(double)RAND_MAX)*10; cmp_t p(x,y); for(int j = 0 ; j < g_n ; j++) { if(abs(g_center[j]-p) < 1+ERROR) { count++; break; } } } return (count/(double)NUM)*100; } int main() { while(cin >> g_n , g_n) { double x,y; g_center.clear(); for(int i = 0 ; i < g_n ; i++) { cin >> x >> y; x = floor(x*100+0.5+ERROR); y = floor(y*100+0.5+ERROR); g_center.push_back(cmp_t(x,y)); } cout.setf(ios::fixed); cout.precision(2); cout << Solve() << endl; // for(int i = 0 ; i < g_n ; i++) // { // cin >> x >> y; // g_center.push_back(cmp_t(x,y)); // } // cout.setf(ios::fixed); // cout.precision(2); // cout<< Solve2() << endl; } return 0; }