Submission #839922

#TimeUsernameProblemLanguageResultExecution timeMemory
839922emeraldblockLongest Trip (IOI23_longesttrip)C++17
15 / 100
16 ms300 KiB
#include <bits/stdc++.h> #include "longesttrip.h" using namespace std; std::vector<int> longest_trip(int N, int D) { vector<int> s1({0}),s2({1}); for (int i = 2; i < N; ++i) { if (are_connected({s1.back()}, {i})) { s1.push_back(i); } else if (are_connected({s2.back()}, {i})) { s2.push_back(i); } else { while (!s2.empty()) { s1.push_back(s2.back()); s2.pop_back(); } s2.push_back(i); } } if (!are_connected(s1, s2)) { return (s1.size() >= s2.size() ? s1 : s2); } if (are_connected(s1,{s2.front()})) { reverse(s2.begin(),s2.end()); } else { int lo = 0, hi = s2.size(); while (hi-lo>1) { int mid = (lo+hi)/2; vector<int> v; for (int i = lo; i < mid; ++i) { v.push_back(s2[i]); } if (are_connected(s1, v)) { hi = mid; } else { lo = mid; } } rotate(s2.begin(),s2.begin()+hi,s2.end()); } if (are_connected({s1.front()},{s2.back()})) { reverse(s1.begin(),s1.end()); } else { int lo = 0, hi = s1.size(); while (hi-lo>1) { int mid = (lo+hi)/2; vector<int> v; for (int i = lo; i < mid; ++i) { v.push_back(s1[i]); } if (are_connected(v, {s2.back()})) { hi = mid; } else { lo = mid; } } rotate(s1.begin(),s1.begin()+hi,s1.end()); } while (!s2.empty()) { s1.push_back(s2.back()); s2.pop_back(); } return s1; }
#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...