func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 100005;   const double eps = 1e-9;   const double pi = acos(-1);   struct P {     int x, y;   } a[N];   int n, vi[N], t[N];   double l[N], r[N], q[N];   long long k;   void change(int k, int v) {     for (; k; k -= k & (-k)) t[k] += v;   }   int ask(int k) {     int s = 0;     for (; k < N; k += k & (-k)) s += t[k];     return s;   }   struct node {     double p1, p2;     int v;   } op[N * 2];   bool cmp(node a, node b) { return a.p1 < b.p1; }   long long count(double R) {     int top = 0, op_top = 0;     memset(t, 0, sizeof(t));     for (int i = (int)(1); i <= (int)(n); i++) {       l[i] = r[i] = -1;       double d = sqrt(a[i].x * a[i].x + a[i].y * a[i].y);       if (d < R + eps) continue;       double theta = atan2(a[i].y, a[i].x);       double delta = acos(R / d);       l[i] = theta - delta;       r[i] = theta + delta;       for (; l[i] < 0; l[i] += 2 * pi)         ;       for (; r[i] < 0; r[i] += 2 * pi)         ;       for (; l[i] >= 2 * pi; l[i] -= 2 * pi)         ;       for (; r[i] >= 2 * pi; r[i] -= 2 * pi)         ;       if (l[i] > r[i]) swap(l[i], r[i]);       q[++top] = l[i];       op[++op_top] = (node){l[i], l[i], 1};       op[++op_top] = (node){r[i], l[i], -1};     }     sort(q + 1, q + top + 1);     sort(op + 1, op + op_top + 1, cmp);     long long sum = 0;     for (int i = (int)(1); i <= (int)(op_top); i++) {       int p = lower_bound(q + 1, q + top + 1, op[i].p2) - q;       change(p, op[i].v);       if (op[i].v == -1) sum += ask(p);     }     return sum;   }   int main() {     scanf( %d%lld , &n, &k);     for (int i = (int)(1); i <= (int)(n); i++) scanf( %d%d , &a[i].x, &a[i].y);     double l = 0, r = 15000;     for (int T = (int)(1); T <= (int)(50); T++) {       double mid = (l + r) / 2;       if (1ll * n * (n - 1) / 2 - count(mid) < k)         l = mid;       else         r = mid;     }     printf( %.10lf n , (l + r) / 2);   }   