Submission #1037898

#TimeUsernameProblemLanguageResultExecution timeMemory
1037898errayLongest Trip (IOI23_longesttrip)C++17
15 / 100
18 ms760 KiB
#include "longesttrip.h" #include <bits/stdc++.h> using namespace std; #ifdef DEBUG #include "/home/ioi/egoi2024/d2/debug.h" #else #define debug(...) void(37) #endif vector<int> m(vector<int> x, vector<int> y) { vector<int> res; res = x; res.insert(res.end(), y.begin(), y.end()); return res; } mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); std::vector<int> longest_trip(int N, int D) { array<vector<int>, 2> l{}; vector<int> ord(N); iota(ord.begin(), ord.end(), 0); shuffle(ord.begin(), ord.end(), rng); l[0] = {ord.back()}; ord.pop_back(); for (auto i : ord) { if (l[1].empty()) { l[1].push_back(i); } else if (are_connected({i}, {l[0].back()})) { l[0].push_back(i); } else if (are_connected({i}, {l[1].back()})) { l[1].push_back(i); } else { l[0] = m(l[0], l[1]); l[1] = {i}; } } if (l[1].empty()) return l[0]; vector<int> ans; for (int it = 0; it < 2; ++it) { for (int it1 = 0; it1 < 2; it1++) { if (are_connected({l[0].back()}, {l[1][0]})) { ans = m(l[0], l[1]); } reverse(l[1].begin(), l[1].end()); } swap(l[0], l[1]); } if (ans.empty()) { if (!are_connected(l[0], l[1])) { ans = int(l[0].size()) > int(l[1].size()) ? l[0] : l[1]; } else { int s = -1; { int low = 0, high = int(l[1].size()) - 1; while (low < high) { int mid = (low + high) >> 1; if (are_connected(l[0], vector<int>(l[1].begin(), l[1].begin() + mid + 1))) { high = mid; } else { low = mid + 1; } } s = low; } int f = -1; { int low = 0, high = int(l[0].size()) - 1; while (low < high) { int mid = (low + high) >> 1; if (are_connected({l[1][s]}, vector<int>(l[0].begin(), l[0].begin() + mid + 1))) { high = mid; } else { low = mid + 1; } } f = low; } rotate(l[1].begin(), l[1].begin() + s, l[1].end()); if (f != int(l[0].size()) - 1) rotate(l[0].begin(), l[0].begin() + f + 1, l[0].end()); ans = m(l[0], l[1]); } } return ans; }
#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...