Submission #1123261

#TimeUsernameProblemLanguageResultExecution timeMemory
1123261GervidRoad Construction (JOI21_road_construction)C++20
6 / 100
334 ms15460 KiB
#include <iostream> #include <vector> #include <queue> #include <stack> #include <set> #include <map> #include <limits.h> #include <algorithm> #include <math.h> #include <array> using namespace std; const unsigned int max_num_of_distances = 1000000; struct point { int x, y; }; struct scp { int id, next; long long dis; const bool operator< (const scp other) const { return dis < other.dis; } const bool operator> (const scp other) const { return dis > other.dis; } }; int main() { iostream::sync_with_stdio(0); cin.tie(0); int n, k, i; cin >> n >> k; vector<point> p(n); for (i = 0; i < n; i++) { cin >> p[i].x >> p[i].y; } vector<pair<long long, point>> scalars; for (i = 0; i < n; i++) { long long xi = static_cast<long long>(p[i].x) + 2000000000LL; long long yi = static_cast<long long>(p[i].y) + 2000000000LL; long long dot_product = xi * 2 + yi * 1; scalars.push_back({ dot_product, p[i] }); } sort(scalars.begin(), scalars.end(), [](pair<long long, point> a, pair<long long, point> b) {return a.first < b.first; }); vector<int> distances; distances.reserve(max_num_of_distances); priority_queue<scp, vector<scp>, greater<scp>> q; for (i = 0; i < n-1; i++) { q.push({ i, i + 1, scalars[i+1].first - scalars[i].first}); } while (distances.size() < max_num_of_distances && !q.empty()) { int next = q.top().next, id = q.top().id; q.pop(); distances.push_back(abs(scalars[id].second.x - scalars[next].second.x) + abs(scalars[id].second.y - scalars[next].second.y)); if (next+1 < n) q.push({ id, next + 1, scalars[next + 1].first - scalars[id].first }); } sort(distances.begin(), distances.end()); for (i = 0; i < k; i++) { cout << distances[i] << '\n'; } } //11 10 //10 -8 //7 2 //7 -8 //-3 -6 //-2 1 //-8 6 //8 -1 //2 4 //6 -6 //2 -1 //-10000 20000
#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...