제출 #957456

#제출 시각아이디문제언어결과실행 시간메모리
957456Turkhuu가장 긴 여행 (IOI23_longesttrip)C++17
85 / 100
13 ms1368 KiB
#include "longesttrip.h" #include <bits/stdc++.h> using namespace std; vector<int> longest_trip(int N, int D) { if (D > 1) { deque<int> a; if (are_connected({0}, {1})) { a = {0, 1}; if (are_connected({0}, {2})) { a.push_front(2); } else { a.push_back(2); } } else { a = {0, 2, 1}; } for (int i = 3; i < N; i++) { if (are_connected({a.front()}, {i})) { a.push_front(i); } else { a.push_back(i); } } return vector(a.begin(), a.end()); } vector<int> a{0}, b{1}; for (int i = 2; i < N; i++) { if (are_connected({i}, {a.back()})) { a.push_back(i); } else if (are_connected({i}, {b.back()})) { b.push_back(i); } else { a.insert(a.end(), b.rbegin(), b.rend()); b = {i}; } } if (!are_connected(a, b)) { return a.size() > b.size() ? a : b; } for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { if (are_connected({a.back()}, {b.front()})) { a.insert(a.end(), b.begin(), b.end()); return a; } reverse(b.begin(), b.end()); } reverse(a.begin(), a.end()); } int i, lo, hi; lo = 0, hi = a.size() - 1; while (lo < hi) { int mi = (lo + hi) / 2; are_connected(vector(a.begin(), a.begin() + mi + 1), b) ? hi = mi : lo = mi + 1; } i = lo, lo = 0, hi = b.size() - 1; while (lo < hi) { int mi = (lo + hi) / 2; are_connected(vector(b.begin(), b.begin() + mi + 1), {a[i]}) ? hi = mi : lo = mi + 1; } vector<int> ans; ans.insert(ans.end(), a.begin() + i + 1, a.end()); ans.insert(ans.end(), a.begin(), a.begin() + i + 1); ans.insert(ans.end(), b.begin() + lo, b.end()); ans.insert(ans.end(), b.begin(), b.begin() + lo); 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...