제출 #846703

#제출 시각아이디문제언어결과실행 시간메모리
846703IvanJLongest Trip (IOI23_longesttrip)C++17
15 / 100
9 ms600 KiB
#include "longesttrip.h" #include<bits/stdc++.h> #define pb push_back #define all(a) (a).begin(), (a).end() using namespace std; vector<int> longest_trip(int n, int D) { if(D == 3) { vector<int> p; for(int i = 0;i < n;i++) p.pb(i); return p; } if(D == 2) { deque<int> dq; if(!are_connected({0}, {1})) dq.pb(0), dq.pb(2), dq.pb(1); else if(!are_connected({1}, {2})) dq.pb(1), dq.pb(0), dq.pb(2); else dq.pb(0), dq.pb(1), dq.pb(2); for(int i = 3;i < n;i++) { if(are_connected({i}, {dq.front()})) dq.push_front(i); else dq.pb(i); } return vector<int>(all(dq)); } if(D == 1) { vector<int> p1, p2; p1.pb(0); for(int i = 1;i < n;i++) { int x = are_connected({i}, {p1.back()}); int y = 0; if(p2.size()) y = are_connected({i}, {p2.back()}); if(x && y) { p1.pb(i); while(p2.size()) p1.pb(p2.back()), p2.pop_back(); } else { if(x) p1.pb(i); else p2.pb(i); } } if((int)p1.size() == n) return p1; if(!are_connected(p1, p2)) { if(p1.size() < p2.size()) swap(p1, p2); return p1; } vector<int> v = p1; while(v.size() > 1) { int mid = (int)v.size() / 2; vector<int> v1, v2; for(int i = 0;i < mid;i++) v1.pb(v[i]); for(int i = mid;i < (int)v.size();i++) v2.pb(v[i]); if(are_connected(v1, p2)) v = v1; else v = v2; } int X = v[0]; v = p2; while(v.size() > 1) { int mid = (int)v.size() / 2; vector<int> v1, v2; for(int i = 0;i < mid;i++) v1.pb(v[i]); for(int i = mid;i < (int)v.size();i++) v2.pb(v[i]); if(are_connected({X}, v1)) v = v1; else v = v2; } int Y = v[0]; vector<int> p; int pos1 = -1, pos2 = -1; for(int i = 0;i < (int)p1.size();i++) if(p1[i] == X) pos1 = i; for(int i = 0;i < (int)p2.size();i++) if(p2[i] == Y) pos2 = i; for(int i = 0;i < (int)p1.size();i++) p.pb(p1[(i + pos1) % (int)p1.size()]); reverse(all(p)); for(int i = 0;i < (int)p2.size();i++) p.pb(p2[(i + pos2) % (int)p2.size()]); return p; } return {}; }
#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...