func_code_string: #include <bits/stdc++.h>   using namespace std;   int T, n, cnt;   struct poi {     double x, y, alp;     poi() {}     poi(double x, double y) : x(x), y(y) { alp = atan2(y, x); }     friend bool operator<(const poi &r1, const poi &r2) {       return r1.alp < r2.alp;     }     friend poi operator+(const poi &r1, const poi &r2) {       return poi(r1.x + r2.x, r1.y + r2.y);     }     friend poi operator-(const poi &r1, const poi &r2) {       return poi(r1.x - r2.x, r1.y - r2.y);     }     friend double operator^(const poi &r1, const poi &r2) {       return r1.x * r2.y - r2.x * r1.y;     }     friend double operator*(const poi &r1, const poi &r2) {       return r1.x * r2.x + r1.y * r2.y;     }     friend poi operator*(double v, const poi &r1) {       return poi(r1.x * v, r1.y * v);     }   } a[210000 << 1], p, w[210000 << 2];   struct line {     poi p, v;     line() {}     line(poi p, poi v) : p(p), v(v) {}   } b[210000 << 2], q[210000 << 2];   void init() {     cnt = 0;     double t = 1e6;     poi p1(t, t), p2(-t, t), p3(-t, -t), p4(t, -t);     b[++cnt] = line(p1, p2 - p1);     b[++cnt] = line(p2, p3 - p2);     b[++cnt] = line(p3, p4 - p3);     b[++cnt] = line(p4, p1 - p4);   }   int insert(poi p1, poi p2) {     double t = (p2 - p1) ^ (p - p1);     if (fabs(t) < 1e-12) return 0;     if (t > 0)       b[++cnt] = line(p1, p2 - p1);     else       b[++cnt] = line(p2, p1 - p2);     return 1;   }   int onleft(poi p1, line l1) { return (l1.v ^ (p1 - l1.p)) > 0; }   int cmp(const line &l1, const line &l2) {     if (fabs(l1.v.alp - l2.v.alp) < 1e-12) return onleft(l1.p, l2);     return l1.v.alp < l2.v.alp;   }   poi intersect(line l1, line l2) {     poi u = l1.p - l2.p;     double tmp = (u ^ l2.v) / (l2.v ^ l1.v);     return l1.p + tmp * l1.v;   }   double HPI() {     int h, r;     sort(b + 1, b + 1 + cnt, cmp);     q[h = r = 1] = b[1];     for (int i = 2; i <= cnt; i++) {       if (fabs(b[i].v.alp - b[i - 1].v.alp) < 1e-12) continue;       while (h < r && !onleft(w[r], b[i])) r--;       while (h < r && !onleft(w[h + 1], b[i])) h++;       q[++r] = b[i];       w[r] = intersect(q[r], q[r - 1]);     }     while (h < r && !onleft(w[r], q[h])) r--;     w[h] = intersect(q[h], q[r]);     if (h + 1 >= r) return 0;     w[r + 1] = w[h];     double ret = 0;     for (int i = h; i <= r; i++) ret += w[i] ^ w[i + 1];     return fabs(ret);   }   int main() {     scanf( %d , &T);     for (; T--;) {       init();       scanf( %d , &n);       n--;       scanf( %lf%lf , &p.x, &p.y);       for (int i = 1; i <= n; i++) {         scanf( %lf%lf , &a[i].x, &a[i].y);         a[i] = a[i] - p;       }       sort(a + 1, a + 1 + n);       int flag = 0;       for (int i = 1; i <= n; i++) {         a[i + n] = a[i];         insert(a[i] + p, a[i + 1] + p);         if (fabs(a[i].alp - a[i + 1].alp) < 1e-12) flag = 1;       }       for (int i = 1, j = 2; i <= n; i++) {         for (; j < i + n && ((a[j] - a[i]) ^ a[i]) < 1e-12; j++)           ;         if (i != j - 1 && !insert(a[i] + p, a[j - 1] + p)) flag = 1;       }       if (flag) {         puts( 0 );         continue;       }       printf( %.8lf n , HPI() / 2.0);     }     return 0;   }   