voidRUN(){ cin >> n >> d; vec.clear(); for (int i = 1; i <= n; ++i) { db x, y; cin >> x >> y; db dis = x * x + y * y; if (sgn(dis - d * d) <= 0) continue; db angle = atan2(y, x); db sub = asin(d / sqrt(dis)); vec.push_back(node(0, i, angle - sub)); vec.push_back(node(1, i, angle + sub)); } if (vec.empty()) { cout << 1 << endl; return; } sort(all(vec)); int res = vec.size() / 2; // for (auto it : vec) { // dbg(it.idx); // } for (int i = 0, len = vec.size(); i < len; ++i) { vector<int> l; memset(mark, 0, sizeof mark); int tmp = 0; for (int k = 0; k < len; k++) { int j = (i + k) % len; if (vec[j].type == 0) { mark[vec[j].idx] = true; l.push_back(vec[j].idx); } elseif (mark[vec[j].idx]) { tmp++; for (auto it : l) { mark[it] = 0; } l.clear(); } } tmp += l.size(); res = min(res, tmp); } cout << res << endl; }