func_code_string: #include <bits/stdc++.h>   using namespace std;   const int M = 2e6 + 2e5;   const int N = M >> 1;   const int MX = 2e6;   const int D = 1e6;   double L[M], R[M];   int g[M];   struct pnt {     int x, y;     void input() { scanf( %d %d , &x, &y); }   } p[N];   int n;   double ans;   int main() {     scanf( %d , &n);     for (int i = 1; i <= n; i++) {       p[i].input();       p[i].x += D, p[i].y += D;     }     function<void(int, double)> update = [&](int y, double x) {       L[y] = min(L[y], x);       R[y] = max(R[y], x);     };     for (int step = 0; step < 2; step++) {       for (int i = 0; i <= MX; i++) L[i] = M, R[i] = -1;       for (int i = 1; i <= n; i++) {         update(p[i].y, p[i].x);         int ni = i == n ? 1 : i + 1;         if (p[i].y == p[ni].y) continue;         double d = (p[ni].x - p[i].x) * 1.0 / (p[ni].y - p[i].y);         double cur;         cur = p[i].x;         for (int j = p[i].y + 1; j < p[ni].y; j++) {           cur += d;           update(j, cur);         }         cur = p[ni].x;         for (int j = p[ni].y + 1; j < p[i].y; j++) {           cur += d;           update(j, cur);         }       }       long long tot = 0;       for (int i = 0; i <= MX; i++) {         int lx = L[i] + 0.9999999;         int rx = R[i] + 0.0000001;         g[i] = rx >= lx ? rx - lx + 1 : 0;         tot += g[i];       }       double c = 0, d = 0, dd = 0;       for (int i = 0; i < MX; i++) {         double r = g[i] * 1.0 / (tot - 1);         d = d + dd + r;         dd = dd + r + r;         c = c + d;         ans += 1.0 * g[i + 1] / tot * c;       }       for (int i = 1; i <= n; i++) swap(p[i].x, p[i].y);     }     cout << fixed << setprecision(10) << ans << endl;     return 0;   }   