Submission #1300039

#TimeUsernameProblemLanguageResultExecution timeMemory
1300039trandangquangRoad Construction (JOI21_road_construction)C++20
13 / 100
112 ms18272 KiB
/// gpt's code, not me #include <bits/stdc++.h> using namespace std; using ll = long long; struct Point { ll x, y; ll u, v; int id; }; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N; long long K; cin >> N >> K; vector<Point> p(N); for (int i = 0; i < N; i++) { cin >> p[i].x >> p[i].y; p[i].u = p[i].x + p[i].y; p[i].v = p[i].x - p[i].y; p[i].id = i; } sort(p.begin(), p.end(), [](auto &a, auto &b) { if (a.u != b.u) return a.u < b.u; return a.v < b.v; }); // Min-heap of (distance, i, j) priority_queue<tuple<ll,int,int>, vector<tuple<ll,int,int>>, greater<>> pq; // Next pointer for each i vector<int> nxt(N); for (int i = 0; i < N; i++) { if (i + 1 < N) { ll dist = abs(p[i+1].x - p[i].x) + abs(p[i+1].y - p[i].y); pq.push({dist, i, i+1}); nxt[i] = i + 1; } else { nxt[i] = -1; } } vector<ll> ans; ans.reserve(K); while (!pq.empty() && (long long)ans.size() < K) { auto [d, i, j] = pq.top(); pq.pop(); ans.push_back(d); // Move j forward for same i if (j + 1 < N) { ll nd = abs(p[j+1].x - p[i].x) + abs(p[j+1].y - p[i].y); pq.push({nd, i, j+1}); } } for (auto x : ans) { cout << x << "\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...