func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 100005;   const int inf = (1 << 28) - 1;   struct Point {     double x, y;     Point() {}     Point(double _x, double _y) {       x = _x;       y = _y;     }     Point operator-(const Point &b) const { return Point(x - b.x, y - b.y); }     double operator^(const Point &b) const { return x * b.y - y * b.x; }     double operator*(const Point &b) const { return x * b.x + y * b.y; }     void transXY(double B) {       double tx = x, ty = y;       x = tx * cos(B) - ty * sin(B);       y = tx * sin(B) + ty * cos(B);     }   };   struct Line {     Point s, e;     Line() {}     Line(Point _s, Point _e) {       s = _s;       e = _e;     }   };   double dist(Point a, Point b) { return sqrt((a - b) * (a - b)); }   Point NearestPointToLineSeg(Point P, Line L) {     Point result;     double t = ((P - L.s) * (L.e - L.s)) / ((L.e - L.s) * (L.e - L.s));     if (t >= 0 && t <= 1) {       result.x = L.s.x + (L.e.x - L.s.x) * t;       result.y = L.s.y + (L.e.y - L.s.y) * t;     } else {       if (dist(P, L.s) < dist(P, L.e))         result = L.s;       else         result = L.e;     }     return result;   }   const double PAI = acos(-1);   int main() {     Point A, tmp, now, sta;     int n;     scanf( %d%lf%lf , &n, &A.x, &A.y);     double Max = -1, Min = inf;     for (int i = 1; i <= n; ++i) {       scanf( %lf%lf , &now.x, &now.y);       if (i > 1)         Min = min(Min, dist(A, NearestPointToLineSeg(A, Line(tmp, now))));       else         sta = now;       Min = min(Min, dist(A, now));       Max = max(Max, dist(A, now));       tmp = now;     }     Min = min(Min, dist(A, NearestPointToLineSeg(A, Line(sta, now))));     printf( %.18lf n , (PAI * Max * Max) - (PAI * Min * Min));     return 0;   }   