Submission #1239936

#TimeUsernameProblemLanguageResultExecution timeMemory
1239936ZeroCoolLongest Trip (IOI23_longesttrip)C++20
0 / 100
0 ms408 KiB
#include "longesttrip.h" #include <bits/stdc++.h> using namespace std; #define all(v) v.begin(), v.end() std::vector<int> longest_trip(int n, int d){ vector<int> P; vector<int> Q; for(int i = 2;i < n;i++){ if(P.empty() || are_connected({P.back()}, {i}))P.push_back(i); else if(Q.empty() || are_connected({Q.back()}, {i}))Q.push_back(i); else{ while(P.size())Q.push_back(P.back()), P.pop_back(); P.push_back(i); } } if(P.empty() || Q.empty() || !are_connected(P, Q))return (P.size() > Q.size() ? P : Q); assert(0); for(int i = 0;i < 2;i++){ for(int j = 0;j < 2;j++){ if(are_connected({P.back()}, {Q.front()})){ for(auto u: Q)P.push_back(u); return P; } reverse(all(Q)); } reverse(all(P)); } int lo = -1, hi = P.size(); while(hi - lo > 1){ int mid = (lo + hi) / 2; vector<int> t; for(int i = 0;i <= mid;i++)t.push_back(P[i]); if(are_connected(t, Q))hi = mid; else lo = mid; } int mi = hi; lo = -1, hi = Q.size(); while(hi - lo > 1){ int mid = (lo + hi) / 2; vector<int> t; for(int i = 0;i <= mid;i++)t.push_back(Q[i]); if(are_connected({P[mi]}, t))hi = mid; else lo = mid; } int mj = hi; vector<int> ans; for(int i = mi + 1;i < P.size();i++)ans.push_back(P[i]); for(int i = 0;i <= mi;i++)ans.push_back(P[i]); for(int i = mj;mj < Q.size();mj++)ans.push_back(Q[i]); for(int i = 0;i < mj;i++)ans.push_back(Q[i]); 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...