#include <bits/stdc++.h>   using namespace std;   int n, i;   double p[2], poly[100005][2], minD = 1e18, maxD = 0, d, answer, lo, hi,                                 EPS = 1e-12, mid1, mid2, x, y, d1, d2;   int main() {     scanf( %d %lf %lf , &n, &p[0], &p[1]);     for (i = 0; i < n; i++) {       scanf( %lf %lf , &poly[i][0], &poly[i][1]);       d = (poly[i][0] - p[0]) * (poly[i][0] - p[0]) +           (poly[i][1] - p[1]) * (poly[i][1] - p[1]);       maxD = max(maxD, d);     }     for (i = 0; i < n; i++) {       lo = 0;       hi = 1;       while (hi - lo > EPS) {         mid1 = lo + (hi - lo) / 3;         mid2 = mid1 + (hi - lo) / 3;         x = poly[i][0] + (poly[(i + 1) % n][0] - poly[i][0]) * mid1;         y = poly[i][1] + (poly[(i + 1) % n][1] - poly[i][1]) * mid1;         d1 = (x - p[0]) * (x - p[0]) + (y - p[1]) * (y - p[1]);         x = poly[i][0] + (poly[(i + 1) % n][0] - poly[i][0]) * mid2;         y = poly[i][1] + (poly[(i + 1) % n][1] - poly[i][1]) * mid2;         d2 = (x - p[0]) * (x - p[0]) + (y - p[1]) * (y - p[1]);         if (d1 < d2)           hi = mid2;         else           lo = mid1;       }       d = d1;       minD = min(minD, d);     }     answer = acos(-1.0) * (maxD - minD);     printf( %.18lf n , answer);     return 0;   }   