Submission #839740

#TimeUsernameProblemLanguageResultExecution timeMemory
839740model_codeLongest Trip (IOI23_longesttrip)C++17
85 / 100
21 ms336 KiB
// partially_correct/sol_birka0_D1_2N.cpp #include "longesttrip.h" #include <random> #include <algorithm> using namespace std; vector<int> longest_trip(int N, int /*D*/) { srand(time(0)); std::vector<int> ids(N); for (int i = 0; i < N; i++) ids[i] = i; random_shuffle(ids.begin(), ids.end()); vector<int> t1 = {ids[0]}, t2 = {ids[1]}; for (int j = 2; j < N; ++j) { int i = ids[j]; if (t2.empty()) { t2 = {i}; continue; } bool add1 = are_connected({t1.back()}, {i}); bool add2 = are_connected({t2.back()}, {i}); if (add1 && add2) { t1.push_back(i); while (!t2.empty()) { t1.push_back(t2.back()); t2.pop_back(); } } else if (add1) { t1.push_back(i); } else if (add2) { t2.push_back(i); } else { while (!t2.empty()) { t1.push_back(t2.back()); t2.pop_back(); } t2 = {i}; } } if (t2.size() > t1.size()) swap(t1, t2); if (t2.empty() || !are_connected(t1, t2)) { return t1; } if (are_connected({t1.back()}, {t2[0]})) { t1.insert(t1.end(), t2.begin(), t2.end()); return t1; } reverse(t2.begin(), t2.end()); if (are_connected({t1.back()}, {t2[0]})) { t1.insert(t1.end(), t2.begin(), t2.end()); return t1; } reverse(t1.begin(), t1.end()); if (are_connected({t1.back()}, {t2[0]})) { t1.insert(t1.end(), t2.begin(), t2.end()); return t1; } reverse(t2.begin(), t2.end()); if (are_connected({t1.back()}, {t2[0]})) { t1.insert(t1.end(), t2.begin(), t2.end()); return t1; } int lo = 0, hi = t2.size(); while (lo + 1 < hi) { int mid = (lo + hi) / 2; if (are_connected(t1, vector<int>(t2.begin() + mid, t2.begin() + hi))) { lo = mid; } else { hi = mid; } } int x = lo; lo = 0, hi = t1.size(); while (lo + 1 < hi) { int mid = (lo + hi) / 2; if (are_connected({t2[x]}, vector<int>(t1.begin() + mid, t1.begin() + hi))) { lo = mid; } else { hi = mid; } } int y = lo; vector<int> t(t1.begin() + y + 1, t1.end()); t.insert(t.end(), t1.begin(), t1.begin() + y + 1); t.insert(t.end(), t2.begin() + x, t2.end()); t.insert(t.end(), t2.begin(), t2.begin() + x); return t; }
#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...