Submission #1239966

#TimeUsernameProblemLanguageResultExecution timeMemory
1239966ZeroCoolLongest Trip (IOI23_longesttrip)C++20
85 / 100
7 ms428 KiB
#include "longesttrip.h" #include <bits/stdc++.h> using namespace std; #define ar array #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){ vector<ar<int,2> > v; if(P.empty()){ P.push_back(i); continue; } if(Q.empty()){ Q.push_back(i); continue; } v.push_back({P.back(), i}); v.push_back({Q.back(), i}); v.push_back({P.back(), Q.back()}); shuffle(all(v), rng); while(v.size()){ auto [a, b] = v.back(); v.pop_back(); if(v.empty() || are_connected({a}, {b})){ //flag = 1; if(b == i){ if(a == P.back())P.push_back(i); else Q.push_back(i); }else{ while(P.size())Q.push_back(P.back()), P.pop_back(); P.push_back(i); } break; } } } //assert(0); 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; //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...