From d59f535602c1d25803a9e288b70528b1bfb82f56 Mon Sep 17 00:00:00 2001 From: hanyixuanten <105723997+hanyixuanten@users.noreply.github.com> Date: Sun, 16 Aug 2026 19:56:53 +0800 Subject: [PATCH] modified: 28.cpp --- 28.cpp | 40 +++++++++++++--------------------------- 1 file changed, 13 insertions(+), 27 deletions(-) diff --git a/28.cpp b/28.cpp index b5f2c74..4a2050d 100644 --- a/28.cpp +++ b/28.cpp @@ -5,44 +5,30 @@ int n, d; struct node { int x, y; - int xl, xr; - const bool operator<(node b) const - { - return xr > b.xr; - } + double xl, xr; } is[1005]; int main() { scanf("%d%d", &n, &d); - int minl = INT_MAX, maxl = INT_MIN; for (int i = 1; i <= n; ++i) { scanf("%d%d", &is[i].x, &is[i].y); - if (is[i].y > d) + if (abs(is[i].y) > d) { puts("-1"); return 0; } - is[i].xl = is[i].x - sqrt(d * d - is[i].y * is[i].y); - is[i].xr = is[i].x + sqrt(d * d - is[i].y * is[i].y); - minl = min(minl, is[i].xl); - maxl = max(maxl, is[i].xr); + double len = sqrt(1.0 * d * d - 1.0 * is[i].y * is[i].y); + is[i].xl = is[i].x - len, is[i].xr = is[i].x + len; } - sort(is + 1, is + n + 1, [](node x, node y) - { return x.xl < y.xl; }); - int ans = 0, now = 1; - int maxans = 0; - priority_queue q; - for (int t = minl; t <= maxl; ++t) - { - while (!q.empty() && q.top().xr < t) - q.pop(); - while (now <= n && is[now].xl >= t) - { - q.push(is[now++]); - maxans = max(maxans, (int)q.size()); - } - } - printf("%d\n", maxans); + sort(is + 1, is + n + 1, [](const node &x, const node &y) + { return x.xr < y.xr; }); + int ans = 0; + double now = -DBL_MAX; + const double eps = 1e-10; + for (int i = 1; i <= n; ++i) + if (now + eps < is[i].xl) + now = is[i].xr, ++ans; + printf("%d\n", ans); return 0; } \ No newline at end of file