func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 100000 + 10;   const int M = 1000000007;   const double eps = 1e-9;   const double PI = acos(-1);   const int oo = 1000000000;   typedef double TT;   struct point {     TT x, y;     point() : x(0), y(0) {}     point(TT a, TT b) {       x = a;       y = b;     }     point operator+(const point& p) const { return point(x + p.x, y + p.y); }     friend ostream& operator<<(ostream& os, const point& p) {       return os <<  (  << p.x <<  ,  << p.y <<  ) ;     }     point operator-(const point& p) const { return point(x - p.x, y - p.y); }     bool operator<(const point& p) const {       if (x - p.x) return x < p.x;       return y < p.y;     }     bool operator==(const point& p) const { return x == p.x && y == p.y; }     bool operator!=(const point& p) const { return !(*this == p); }     void scan() { scanf( %lf%lf , &x, &y); }     double len() { return sqrt(x * x + y * y); }     double dist(const point& p) const { return (p - *this).len(); }     point operator*(TT d) { return point(x * d, y * d); }     point operator/(TT d) { return point(x / d, y / d); }     TT operator*(const point& p) const { return x * p.x + y * p.y; }     TT operator^(const point& p) const { return x * p.y - y * p.x; }     double linePointDist(point a, point b, bool seg = false) {       point c = *this;       if (seg) {         if ((b - a) * (c - b) > 0) return b.dist(c);         if ((a - b) * (c - a) > 0) return a.dist(c);       }       return abs((b - a) ^ (c - a)) / a.dist(b);     }     void rotate(double theta, point Z = point(0, 0)) {       TT ox = x - Z.x;       TT oy = y - Z.y;       x = ox * cos(theta) - oy * sin(theta) + Z.x;       y = ox * sin(theta) + oy * cos(theta) + Z.y;     }   };   double areaOfTri(point a, point b, point c) {     point x = b - a;     point y = c - a;     return (x ^ y) / 2.0;   }   double areaOfPolygon(vector<point>& P) {     TT area = 0;     for (int i = 1; i < P.size() - 1; ++i)       area += (P[i] - P[0]) ^ (P[i + 1] - P[0]);     return abs(area / 2.0);   }   bool collinear(point a, point b, point c) { return areaOfTri(a, b, c) == 0; }   vector<point> x(4), y(4);   int main() {     double mnx = oo, mxx = -oo, mny = oo, mxy = -oo;     for (int i = 0; i < 4; ++i) {       x[i].scan();       mnx = min(mnx, x[i].x);       mny = min(mny, x[i].y);       mxx = max(mxx, x[i].x);       mxy = max(mxy, x[i].y);     }     point dx((mnx + mxx) / 2, (mny + mxy) / 2);     for (int i = 0; i < 4; ++i) y[i].scan();     for (int i = 0; i < 4; ++i)       if (y[i].x >= mnx && y[i].x <= mxx && y[i].y >= mny && y[i].y <= mxy)         return cout <<  YES , 0;     double area = abs(areaOfPolygon(y));     for (int i = 0; i < 4; ++i) {       double cc = abs(areaOfTri(y[3], y[0], x[i]));       for (int j = 1; j < 4; ++j) cc += abs(areaOfTri(y[j - 1], y[j], x[i]));       if (abs(cc - area) < eps) return cout <<  YES , 0;     }     double cc = abs(areaOfTri(y[3], y[0], dx));     for (int j = 1; j < 4; ++j) cc += abs(areaOfTri(y[j - 1], y[j], dx));     if (abs(cc - area) < eps) return cout <<  YES , 0;     cout <<  NO ;     return 0;   }   