From b1bb6d6b045ad54fbb313ef4d370deea589bc415 Mon Sep 17 00:00:00 2001 From: tiennm99 Date: Sat, 29 Nov 2025 01:27:23 +0700 Subject: [PATCH] Update prevoi19_robots.cpp --- cpp/prevoi19_robots.cpp | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/cpp/prevoi19_robots.cpp b/cpp/prevoi19_robots.cpp index 0543cc8..cbf945d 100644 --- a/cpp/prevoi19_robots.cpp +++ b/cpp/prevoi19_robots.cpp @@ -2,6 +2,7 @@ #include #include #include +#include using namespace std; typedef long long ll; @@ -22,26 +23,26 @@ bool isPossible(ll D, const vector &chargers, const Point &start, ll N) { ll min_v = v0 - N; ll max_v = v0 + N; - vector > test_points = { - {min_u, min_v}, {min_u, max_v}, {max_u, min_v}, {max_u, max_v}, - {u0, v0}, {min_u, v0}, {max_u, v0}, {u0, min_v}, {u0, max_v} - }; + set > test_points; + + test_points.insert({min_u, min_v}); + test_points.insert({min_u, max_v}); + test_points.insert({max_u, min_v}); + test_points.insert({max_u, max_v}); for (const Point &c: chargers) { ll cu = c.x + c.y; ll cv = c.x - c.y; - vector > boundary_points = { + vector > corners = { {cu - D, cv - D}, {cu - D, cv + D}, - {cu + D, cv - D}, {cu + D, cv + D}, - {cu - D, cv}, {cu + D, cv}, - {cu, cv - D}, {cu, cv + D} + {cu + D, cv - D}, {cu + D, cv + D} }; - for (auto [u, v]: boundary_points) { - u = max(min_u, min(max_u, u)); - v = max(min_v, min(max_v, v)); - test_points.push_back({u, v}); + for (auto [u, v]: corners) { + ll u_clamped = max(min_u, min(max_u, u)); + ll v_clamped = max(min_v, min(max_v, v)); + test_points.insert({u_clamped, v_clamped}); } } @@ -86,16 +87,16 @@ int main() { ll left = 0; ll right = 4e9; - while (left <= right) { - ll mid = left + (right - left) / 2; + while (left < right) { + ll mid = left + (right - left + 1) / 2; if (isPossible(mid, chargers, start, N)) { - left = mid + 1; + left = mid; } else { right = mid - 1; } } - cout << right << endl; + cout << left << endl; return 0; }