제출 #1016443

#제출 시각아이디문제언어결과실행 시간메모리
1016443pavement가장 긴 여행 (IOI23_longesttrip)C++17
40 / 100
15 ms600 KiB
#include "longesttrip.h" #include <bits/stdc++.h> using namespace std; #define pb push_back vector<int> longest_trip(int N, int D) { vector<int> ret; if (D == 3) { ret.resize(N); iota(ret.begin(), ret.end(), 0); } else if (D == 2) { deque<int> dq; int st = -1; dq.pb(0); if (are_connected({0}, {1})) { dq.pb(1); st = 2; } else { dq.pb(2); dq.pb(1); st = 3; } for (int i = st; i < N; i++) { if (are_connected({i}, {dq.back()})) { dq.pb(i); } else { dq.push_front(i); } } ret = vector<int>(dq.begin(), dq.end()); } else { deque<int> ch1, ch2; ch1.pb(0); int i = 1; for (; i < N; i++) { vector<int> tmp; if (ch1.size() == 1) { tmp.pb(ch1.front()); } else { tmp.pb(ch1.front()); tmp.pb(ch1.back()); } if (are_connected(tmp, {i})) { if (are_connected({ch1.front()}, {i})) { ch1.push_front(i); } else { ch1.pb(i); } } else { ch2.pb(i); break; } } for (i++; i < N; i++) { if (are_connected({ch1.back()}, {i})) { ch1.pb(i); if (ch2.size() == 1) { if (are_connected({ch2.back()}, {i})) { ch1.pb(ch2.back()); ch2.pop_back(); } } else if (!ch2.empty()) { if (are_connected({ch2.front(), ch2.back()}, {i})) { if (are_connected({ch2.back()}, {i})) { while (!ch2.empty()) { ch1.pb(ch2.back()); ch2.pop_back(); } } else { while (!ch2.empty()) { ch1.pb(ch2.front()); ch2.pop_front(); } } } } } else { ch2.pb(i); if (are_connected({ch1.front()}, {i})) { while (!ch2.empty()) { ch1.push_front(ch2.back()); ch2.pop_back(); } } } } deque<int> fin = (ch1.size() > ch2.size() ? ch1 : ch2); ret = vector<int>(fin.begin(), fin.end()); } return ret; }
#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...