diff --git a/28.cpp b/28.cpp new file mode 100644 index 0000000..b5f2c74 --- /dev/null +++ b/28.cpp @@ -0,0 +1,48 @@ +// 112 +#include +using namespace std; +int n, d; +struct node +{ + int x, y; + int xl, xr; + const bool operator<(node b) const + { + return xr > b.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) + { + 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); + } + 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); + return 0; +} \ No newline at end of file