Submission #1239948

#TimeUsernameProblemLanguageResultExecution timeMemory
1239948ZeroCool가장 긴 여행 (IOI23_longesttrip)C++20
85 / 100
7 ms428 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; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); vector<int> ord(n); iota(all(ord), 0); shuffle(all(ord), rng); for(auto i: ord){ 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); 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)); } // assert(0); 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; //assert(are_connected({P[mi]}, {Q[mj]})); 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;i < Q.size();i++)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...