func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxN = 100100;   const long double INF = 1e100;   const long double eps = 1e-6;   const long double PI = 3.14159265358979323846264338328;   long long x[maxN], y[maxN];   long double Dis(long long a, long long b, long long p, long long q) {     long double aa = 1.0 * a, bb = 1.0 * b, pp = 1.0 * p, qq = 1.0 * q;     return (aa - pp) * (aa - pp) + (bb - qq) * (bb - qq);   }   long double DfromL(long long X1, long long Y1, long long aa, long long bb,                      long long pp, long long qq) {     long double X = 1.0 * X1, Y = 1.0 * Y1, a = 1.0 * aa, b = 1.0 * bb,                 p = 1.0 * pp, q = 1.0 * qq;     bool Inf = (a == p);     long double m = (Inf) ? INF : ((b - q) / (a - p));     long double c = (Inf) ? INF : ((b - m * a));     bool zero = (!Inf && m == 0.0);     long double m1 = (Inf) ? (0) : (zero) ? INF : (-1.0 / m);     long double c1 = (Inf) ? (Y) : (zero) ? INF : (Y - m1 * X);     long double XX = (Inf) ? (a) : (zero) ? (X) : ((c1 - c) / (m - m1));     long double YY = (Inf) ? (Y) : (zero) ? (b) : ((m * c1 - m1 * c) / (m - m1));     if (XX >= min(a, p) && XX <= max(a, p) && YY >= min(b, q) &&         YY <= max(b, q)) {       if (Inf) return (X - XX) * (X - XX);       if (zero) return (Y - YY) * (Y - YY);       return ((m * X - Y + c) * (m * X - Y + c)) / (1.0 + m * m);     } else       return -1.0;   }   int main() {     ios::sync_with_stdio(false);     long long n, X, Y;     cin >> n >> X >> Y;     for (int i = 0; i < n; i++) cin >> x[i] >> y[i];     long double maxR = -1.0, minR = INF;     for (int i = 0; i < n; i++) {       long double dis = Dis(X, Y, x[i], y[i]);       maxR = max(maxR, dis);       minR = min(minR, dis);       long double diS = DfromL(X, Y, x[i], y[i], x[(i + 1) % n], y[(i + 1) % n]);       if (diS != -1.0) {         maxR = max(maxR, diS);         minR = min(minR, diS);       }     }     long double ans = PI * (maxR - minR);     cout << setprecision(20) << ans << endl;     return 0;   }   