func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1010;   const double eps = 1e-9;   const double pi = acos(-1.0);   int Sng(double x) {     if (x < -eps) return -1;     if (x > eps) return 1;     return 0;   }   class Point {    public:     double x, y;     Point(double x = 0, double y = 0) : x(x), y(y) {}     void Read() { scanf( %lf%lf , &x, &y); }     double Angle() { return atan2(y, x); }     friend double Dis(const Point &A, const Point &B);   };   Point operator-(const Point &A, const Point &B) {     return Point(A.x - B.x, A.y - B.y);   }   double Dis(const Point &A, const Point &B) {     return sqrt(((A.x - B.x) * (A.x - B.x)) + ((A.y - B.y) * (A.y - B.y)));   }   struct Data {     double x;     int io;     Data(double x = 0, int io = 0) : x(x), io(io) {}     bool operator<(const Data &O) const {       if (Sng(x - O.x)) return x < O.x;       return io > O.io;     }   };   void Good(double &x) {     while (x < -pi) x += 2.0 * pi;     while (x > pi) x -= 2.0 * pi;   }   Point p[N];   Data sk[N * 20];   double ang[N][N], dis[N][N];   int w, h, n, top;   int Add(double l, double r) {     Good(l);     Good(r);     sk[top++] = (Data(l, 1));     sk[top++] = (Data(r, -1));     return l > r;   }   bool Check(int id, double m) {     if (Sng(m) == 0) return true;     int cnt = 0;     top = 0;     if (p[id].x < m) {       double agl = acos(p[id].x / m);       cnt += Add(pi - agl, pi + agl);       cnt += Add(pi - agl, pi + agl);     }     if (p[id].x + m > w) {       double agl = acos((w - p[id].x) / m);       cnt += Add(-agl, agl);       cnt += Add(-agl, agl);     }     if (p[id].y < m) {       double agl = acos(p[id].y / m);       cnt += Add(1.5 * pi - agl, 1.5 * pi + agl);       cnt += Add(1.5 * pi - agl, 1.5 * pi + agl);     }     if (p[id].y + m > h) {       double agl = acos((h - p[id].y) / m);       cnt += Add(0.5 * pi - agl, 0.5 * pi + agl);       cnt += Add(0.5 * pi - agl, 0.5 * pi + agl);     }     for (int i = 0; i < n; i++) {       if (i == id || Sng(dis[id][i]) == 0 || dis[id][i] >= 2 * m) continue;       double agl = acos((dis[id][i] / 2 / m));       cnt += Add(ang[i][id] - agl, ang[i][id] + agl);     }     if (cnt <= 1) return true;     sort(sk, sk + top);     for (int i = 0; i < top; i++) {       cnt += sk[i].io;       if (cnt <= 1) return true;     }     return false;   }   int main() {     scanf( %d%d%d , &w, &h, &n);     for (int i = 0; i < n; i++) {       p[i].Read();     }     random_shuffle(p, p + n);     for (int i = 0; i < n; i++)       for (int j = i + 1; j < n; j++) {         ang[i][j] = (p[i] - p[j]).Angle();         ang[j][i] = (p[j] - p[i]).Angle();         dis[j][i] = dis[i][j] = Dis(p[i], p[j]);       }     double ans = 0.0;     for (int i = 0; i < n; i++) {       if (Check(i, ans + eps) == false) continue;       double l = ans, r = sqrt(1.0 * w * w + 1.0 * h * h);       for (int t = 0; r - l > 1e-10; t++) {         double mid = (l + r) / 2.0;         if (Check(i, mid))           l = mid + eps, ans = mid;         else           r = mid - eps;       }     }     printf( %.15lf n , ans);     return 0;   }   