func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 100005;   const long double INF = 1e18;   const long double PI = acos(-1.0);   int n;   pair<long long, long long> o, origin, p[N];   long long r_1 = 0;   long double r_2 = INF;   long long sqDist(pair<long long, long long> a, pair<long long, long long> b) {     return (a.first - b.first) * (a.first - b.first) +            (a.second - b.second) * (a.second - b.second);   }   bool isObtuse(pair<long long, long long> a, pair<long long, long long> b,                 pair<long long, long long> c) {     long long ab = sqDist(a, b), bc = sqDist(b, c), ca = sqDist(c, a);     return ab + bc <= ca;   }   long double minDist(pair<long long, long long> a,                       pair<long long, long long> b) {     long double diff_x = b.first - a.first, diff_y = b.second - a.second;     if (diff_x == 0 and diff_y == 0) {       diff_x = a.first;       diff_y = a.second;       return diff_x * diff_x + diff_y * diff_y;     }     long double t = (-a.first * diff_x - a.second * diff_y) /                     (1.0 * diff_x * diff_x + 1.0 * diff_y * diff_y);     if (t < 0) {       diff_x = a.first;       diff_y = a.second;     } else if (t > 1) {       diff_x = b.first;       diff_y = b.second;     } else {       diff_x = a.first + t * diff_x;       diff_y = a.second + t * diff_y;     }     return diff_x * diff_x + diff_y * diff_y;   }   int main() {     origin = pair<long long, long long>(0, 0);     scanf( %d %lld %lld , &n, &o.first, &o.second);     for (int i = 0; i < n; ++i) {       scanf( %lld %lld , &p[i].first, &p[i].second);       p[i].first -= o.first, p[i].second -= o.second;       r_1 = max(r_1, sqDist(p[i], origin));       r_2 = min(r_2, (long double)sqDist(p[i], origin));     }     p[n] = p[0];     for (int i = 0; i < n; ++i) {       r_2 = min(r_2, minDist(p[i], p[i + 1]));     }     long double ans = max((long double)0.0, PI * (r_1 - r_2));     printf( %0.16f n , (double)ans);     return 0;   }   