func_code_string: #include <bits/stdc++.h>   using namespace std;   const int Maxn = 100000 + 10;   const double PI = M_PI;   const double eps = 1e-8;   int dcmp(double a) {     if (fabs(a) < eps) return 0;     if (a > 0) return 1;     return -1;   }   struct Point {     double x, y;     Point operator+(const Point &A) { return (Point){A.x + x, A.y + y}; }     Point operator-(const Point &A) { return (Point){x - A.x, y - A.y}; }   } P, Poly[Maxn];   int n;   struct Line {     Point P;     Point V;   } Line[Maxn];   double CalDJ(Point A, Point B) { return A.x * B.x + A.y * B.y; }   double CalCJ(Point A, Point B) { return A.x * B.y - A.y * B.x; }   double CalLen(Point A) { return sqrt(CalDJ(A, A)); }   double CalDIS(Point P, Point A, Point B) {     Point v1 = B - A, v2 = P - A, v3 = P - B;     if (dcmp(CalDJ(v1, v2)) < 0) return CalLen(v2);     if (dcmp(CalDJ(v1, v3)) > 0) return CalLen(v3);     return fabs(CalCJ(v1, v2) / CalLen(v1));   }   double Getdis(Point Q) {     long long dx = Q.x - P.x, dy = Q.y - P.y;     long long ret = dx * dx + dy * dy;     return ret;   }   double Max, Min;   void solve() {     scanf( %d , &n);     scanf( %lf%lf , &P.x, &P.y);     for (int i = 1; i <= n; i++) scanf( %lf%lf , &Poly[i].x, &Poly[i].y);     Min = Getdis(Poly[1]);     for (int i = 1; i <= n; i++) {       double di = Getdis(Poly[i]);       if (di > Max) Max = di;       if (di < Min) Min = di;     }     Poly[n + 1] = Poly[1];     for (int i = 1; i <= n; i++) {       double dis = CalDIS(P, Poly[i], Poly[i + 1]);       dis = dis * dis;       if (dis < Min) Min = dis;     }     double ans = PI * (Max - Min);     printf( %lf n , ans);   }   int main() {     solve();     return 0;   }   