Submission #1029205

#TimeUsernameProblemLanguageResultExecution timeMemory
1029205Mr_HusanboyLongest Trip (IOI23_longesttrip)C++17
85 / 100
12 ms856 KiB
#include "longesttrip.h" #include <bits/stdc++.h> using namespace std; #define ll long long #define ff first #define ss second #define all(a) (a).begin(), (a).end() template<typename T> int len(T &a){return a.size();} int ask(int a, int b){ return are_connected({a}, {b}); } vector<int> longest_trip(int n, int d) { deque<int> a = {0}, b = {1}; for(int i = 2; i < n; i ++){ if(ask(a.back(), i)){ a.push_back(i); }else if(ask(b.back(), i)){ b.push_back(i); }else{ for(int i = len(b) - 1; i >= 0; i --) a.push_back(b[i]); b = {i}; } } if(len(b) > len(a)) swap(a, b); vector<int> aa, bb; for(auto u : a) aa.push_back(u); for(auto u : b) bb.push_back(u); if(are_connected(aa, bb) == 0){ if(len(aa) > len(bb)) return aa; return bb; } vector<int> res; if(ask(a[0], b[0])){ for(int i = len(a) - 1; i >= 0; i --){ res.push_back(a[i]); } for(int i = 0; i < len(b); i ++) res.push_back(b[i]); return res; } if(ask(a[0], b.back())){ for(auto u : b) res.push_back(u); for(int i = 0; i < len(a); i ++) res.push_back(a[i]); return res; } if(ask(a.back(), b[0])){ for(auto u : a) res.push_back(u); for(auto u : b) res.push_back(u); return res; } if(ask(a.back(), b.back())){ for(auto u : a) res.push_back(u); for(int i = len(b) - 1; i >= 0; i --) res.push_back(b[i]); return res; } int l = -1, r = len(a); while(r - l > 1){ int m = (l + r) / 2; vector<int> sh; for(int i = 0; i <= m; i ++) sh.push_back(a[i]); if(are_connected(sh, bb)){ r = m; }else l = m; } int i = r; l = -1, r = len(b); while(r - l > 1){ int m = (l + r) / 2; vector<int> sh; for(int k = 0; k <= m; k ++) sh.push_back(b[k]); if(are_connected({a[i]}, sh)){ r = m; }else l = m; } int j = r; for(int k = i + 1; k < len(a); k ++) res.push_back(a[k]); for(int k = 0; k <= i; k ++) res.push_back(a[k]); for(int k = j; k < len(b); k ++) res.push_back(b[k]); for(int k = 0; k < j; k ++) res.push_back(b[k]); return res; }
#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...