func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m, i, j;   const double eps = 1e-9;   struct nd {     double x, y;   };   nd operator-(nd x, nd y) { return (nd){x.x - y.x, x.y - y.y}; }   bool cmp(nd x, nd y) {     if (x.x == y.x) return x.y < y.y;     return x.x < y.x;   }   double dis(nd x, nd y) { return abs(x.x - y.x) + abs(x.y - y.y); }   double dis2(nd x, nd y) {     return sqrt((x.x - y.x) * (x.x - y.x) + (x.y - y.y) * (x.y - y.y));   }   double crs(nd x, nd y) { return x.x * y.y - x.y * y.x; }   vector<nd> all, cov;   nd stk[2000005];   int tp;   void update1(nd x) {     if (0 <= x.x && x.x <= 1e5 && 0 <= x.y && x.y <= 1e5) all.push_back(x);   }   void update2(nd p, double r, nd x) {     if (dis(p, x) <= r) all.push_back(x);   }   int main() {     scanf( %d , &n);     for (i = 1; i <= n; i++) {       double x, y, r;       scanf( %lf%lf%lf , &x, &y, &r);       if (x + r <= 1e5)         update1((nd){x + r, y});       else {         update1((nd){1e5, y - (r - (1e5 - x))});         update1((nd){1e5, y + (r - (1e5 - x))});       }       if (x - r >= 0)         update1((nd){x - r, y});       else {         update1((nd){0, y - (r - x)});         update1((nd){0, y + (r - x)});       }       if (y + r <= 1e5)         update1((nd){x, y + r});       else {         update1((nd){x - (r - (1e5 - y)), 1e5});         update1((nd){x + (r - (1e5 - y)), 1e5});       }       if (y - r >= 0)         update1((nd){x, y - r});       else {         update1((nd){x - (r - y), 0});         update1((nd){x + (r - y), 0});       }       update2((nd){x, y}, r, (nd){0, 0});       update2((nd){x, y}, r, (nd){0, 1e5});       update2((nd){x, y}, r, (nd){1e5, 0});       update2((nd){x, y}, r, (nd){1e5, 1e5});     }     sort(all.begin(), all.end(), cmp);     stk[tp = 1] = all[0];     for (i = 1; i < all.size(); i++) {       if (all[i].x == all[i - 1].x && all[i].y == all[i - 1].y) continue;       while (tp > 1 && crs(stk[tp] - stk[tp - 1], all[i] - stk[tp]) > -eps) tp--;       stk[++tp] = all[i];     }     for (i = 1; i < tp; i++) cov.push_back(stk[i]);     reverse(all.begin(), all.end());     stk[tp = 1] = all[0];     for (i = 1; i < all.size(); i++) {       if (all[i].x == all[i - 1].x && all[i].y == all[i - 1].y) continue;       while (tp > 1 && crs(stk[tp] - stk[tp - 1], all[i] - stk[tp]) > -eps) tp--;       stk[++tp] = all[i];     }     for (i = 1; i < tp; i++) cov.push_back(stk[i]);     double ans = -1e18;     int res = 0;     for (i = 0; i < cov.size(); i++) {       int j = (i + 1) % cov.size();       int k = (i + 2) % cov.size();       double tmp = dis2(cov[i], cov[j]) * dis2(cov[i], cov[k]) *                    dis2(cov[j], cov[k]) / 4 /                    abs(crs(cov[j] - cov[i], cov[k] - cov[i]) / 2);       if (tmp > ans) {         ans = tmp;         res = i;       }     }     printf( %.0f %.0f n , cov[res].x, cov[res].y);     printf( %.0f %.0f n , cov[(res + 1) % cov.size()].x,            cov[(res + 1) % cov.size()].y);     printf( %.0f %.0f n , cov[(res + 2) % cov.size()].x,            cov[(res + 2) % cov.size()].y);     return 0;   }   