Submission #1207114

#TimeUsernameProblemLanguageResultExecution timeMemory
1207114PekibanLongest Trip (IOI23_longesttrip)C++20
15 / 100
5 ms408 KiB
#include "longesttrip.h" #include <bits/stdc++.h> #pragma GCC optimize("O3") using namespace std; #define pb push_back vector<int> longest_trip(int n, int D) { if (D == 3) { vector<int> v(n); iota(v.begin(), v.end(), 0); return v; } if (D == 2) { deque<int> dq; dq = {0}; set<int> s; for (int i = 1; i < n; ++i) s.insert(i); while (s.size() > 1) { int x = *s.begin(); s.erase(x); int y = *s.begin(); s.erase(y); if (are_connected({dq.back()}, {x})) { dq.pb(x); s.insert(y); } else { dq.pb(y); s.insert(x); } } int x = *s.begin(); if (are_connected({dq.back()}, {x})) dq.pb(x); else dq.push_front(x); vector<int> v(n); for (int i = 0; i < n; ++i) v[i] = dq[i]; return v; } if (D == 1) { vector<int> A = {0}, B; for (int i = 1; i < n; ++i) { bool a = are_connected({A.back()}, {i}); if (B.empty()) { if (a) A.pb(i); else B.pb(i); } else { bool b = are_connected({B.back()}, {i}); if (a && b) { A.pb(i); reverse(B.begin(), B.end()); for (auto x : B) A.pb(x); B.clear(); } else if (a) A.pb(i); else B.pb(i); } } if (B.empty()) return A; if (are_connected(A, B)) { auto a = A, b = B; while (a.size() > 1 || b.size() > 1) { if (a.size() > 1) { vector<int> c[2]; for (int i = 0; i < a.size(); ++i) c[i%2].pb(a[i]); if (are_connected({c[0]}, {b})) a = c[0]; else a = c[1]; } if (b.size() > 1) { vector<int> c[2]; for (int i = 0; i < b.size(); ++i) c[i%2].pb(b[i]); if (are_connected({c[0]}, {a})) b = c[0]; else b = c[1]; } } int x = a[0], y = b[0]; if (are_connected({A.back()}, {B.back()})) { while (A.back() != x) { B.pb(A.back()); A.pop_back(); } } else if (are_connected({A[0]}, {B.back()})) { reverse(A.begin(), A.end()); while (A.back() != x) { B.pb(A.back()); A.pop_back(); } } else { vector<int> c; while (A.back() != x) { c.pb(A.back()); A.pop_back(); } reverse(A.begin(), A.end()); while (!A.empty()) { c.pb(A.back()); A.pop_back(); } } if (are_connected({A[0]}, {B.back()})) { reverse(A.begin(), A.end()); for (auto i : A) B.pb(i); return B; } else if (are_connected({A[0]}, {B[0]})) { reverse(B.begin(), B.end()); for (auto i : A) B.pb(i); return B; } vector<int> c; while (B.back() != y) { c.pb(B.back()); B.pop_back(); } reverse(B.begin(), B.end()); for (auto i : c) B.pb(i); for (auto x : B) A.pb(x); return A; } return A.size() > B.size() ? A : B; } 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...