#include #include #include #include using namespace std ; vector v ; double solv(double x, double y) { double a = 0 ; double q = 0 ; if (x + y >= 1) { q = sqrt(x*(y+x-1)/y) ; a = q*(1-y) ; } return a - (x-q)*y + y*(q*q*q-3*q*x-x*x*(x-3))/(3*x*(1-x)) ; } int main() { int n ; cout << setprecision(15) ; cin >> n ; vector v(2*n) ; for (int i=0; i<2*n; i++) cin >> v[i] ; double minx = v[0] ; double maxx = v[0] ; double miny = v[1] ; double maxy = v[1] ; for (int i=0; i<2*n; i += 2) { minx = min(minx, v[i]) ; maxx = max(maxx, v[i]) ; miny = min(miny, v[i+1]) ; maxy = max(maxy, v[i+1]) ; } double scale = (maxx-minx)*(maxy-miny) ; if (n == 4) { cout << scale << endl ; return 0 ; } if (n != 6) cout << "Bad n" << endl ; int ip = -1 ; for (int i=0; i<2*n; i += 2) { if (v[i] != minx && v[i] != maxx && v[i+1] != miny && v[i+1] != maxy) { if (ip >= 0) cout << "Bad data set" << endl ; ip = i ; } } int op = (ip + 6) % (2 * n) ; if (v[op] != minx) swap(minx, maxx) ; if (v[op+1] != miny) swap(miny, maxy) ; double x = (v[ip]-minx) / (maxx-minx) ; double y = (v[ip+1]-miny) / (maxy-miny) ; double a = scale*(solv(x,y)+solv(y,x)+y*x) ; cout << a << endl ; }