제출 #1239975

#제출 시각아이디문제언어결과실행 시간메모리
1239975ZeroCool가장 긴 여행 (IOI23_longesttrip)C++20
15 / 100
6 ms420 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); bool kur = 0; 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; } if(are_connected({P.back()}, {i})){ kur = 0; P.push_back(i); }else if(kur || are_connected({Q.back()}, {i})){ kur = 1; Q.push_back(i); }else{ kur = 0; while(P.size())Q.push_back(P.back()), P.pop_back(); P.push_back(i); } } //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 l = -1, r = P.size(); int L = -1, R = Q.size(); while(r - l > 1 || R - L > 1){ if(r - l > 1){ int mid = (l + r) / 2; vector<int> a, b; for(int i = 0;i <= mid;i++)a.push_back(P[i]); for(int i = 0;i < R;i++)b.push_back(Q[i]); if(are_connected(a, b))r = mid; else l = mid; } if(R - L > 1){ int mid = (L + R) / 2; vector<int> a, b; for(int i = 0;i <= mid;i++)a.push_back(Q[i]); for(int i = 0;i < r;i++)b.push_back(Q[i]); if(are_connected(a, b))R = mid; else L = mid; } } //assert(are_connected({P[r]}, {Q[R]})); vector<int> ans; for(int i = r + 1;i < P.size();i++)ans.push_back(P[i]); for(int i = 0;i <= r;i++)ans.push_back(P[i]); for(int i = R;i < Q.size();i++)ans.push_back(Q[i]); for(int i = 0;i < R;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...