제출 #1150396

#제출 시각아이디문제언어결과실행 시간메모리
1150396marvinthangLongest Trip (IOI23_longesttrip)C++17
100 / 100
5 ms420 KiB
#include "longesttrip.h" #include <bits/stdc++.h> using namespace std; vector<int> longest_trip(int N, int D) { auto connected = [&] (int u, int v) { return are_connected({u}, {v}); }; vector <int> path; if (D == 3) { path.resize(N); iota(path.begin(), path.end(), 0); } else if (D == 2) { if (!connected(0, 1)) path = {0, 2, 1}; else if (!connected(0, 2)) path = {0, 1, 2}; else path = {1, 0, 2}; for (int i = 3; i < N; ++i) { if (!connected(i, path.back())) path.insert(path.begin(), i); else path.push_back(i); } } else { vector <int> left{0}, right{1}; bool last = false; for (int i = 2; i < N; ++i) { if (connected(left.back(), i)) { left.push_back(i); last = false; } else if (last || connected(right.back(), i)) { right.push_back(i); last = true; } else { left.insert(left.end(), right.rbegin(), right.rend()); right = {i}; last = false; } } if (left.size() < right.size()) swap(left, right); if (right.empty() || !are_connected(left, right)) return left; for (int t = 0; t < 2; ++t) { if ((int) left.size() > 1) { if (connected(left.back(), right.back())) { left.insert(left.end(), right.rbegin(), right.rend()); return left; } else if (connected(left[0], right.back())) { right.insert(right.end(), left.begin(), left.end()); return right; } } swap(left, right); } int l = 1, r = (int) left.size() - 1; while (l <= r) { int m = l + r >> 1; if (are_connected(vector(left.begin(), left.begin() + m), right)) r = m - 1; else l = m + 1; } rotate(left.begin(), left.begin() + l, left.end()); l = 0, r = (int) right.size() - 2; while (l <= r) { int m = l + r >> 1; if (are_connected(vector(right.begin(), right.begin() + m + 1), {left.back()})) r = m - 1; else l = m + 1; } rotate(right.begin(), right.begin() + l, right.end()); left.insert(left.end(), right.begin(), right.end()); return left; } return path; }
#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...