Submission #1137167

#TimeUsernameProblemLanguageResultExecution timeMemory
1137167shjeongLongest Trip (IOI23_longesttrip)C++20
70 / 100
28 ms476 KiB
#include "longesttrip.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll,ll> pi; #define sz(x) x.size() #define all(x) x.begin(), x.end() bool ask(vector<int> u, vector<int> v){ return are_connected(u,v); } std::vector<int> longest_trip(int n, int D) { //D=1 vector<int> ret; vector<int> L = {0}; set<int> not_in_l; for(int i = 1 ; i < n ; i++)not_in_l.insert(i); while(sz(not_in_l)){ vector<int> v; for(auto i : not_in_l)v.push_back(i); ll l = -1, r = sz(v); //처음으로 connected 되는 위치가 r에 저장됨 while(l+1 < r){ ll mid = l+r>>1; vector<int> tmp; for(int i = 0 ; i <= mid ; i++)tmp.push_back(v[i]); if(ask({L.back()}, tmp))r = mid; else l = mid; } if(r == sz(v))break; L.push_back(v[r]); not_in_l.erase(v[r]); } if(!sz(not_in_l))return L; vector<int> v; for(auto i : not_in_l)v.push_back(i); ll l = -1, r = sz(L); while(l+1 < r){ ll mid = l+r>>1; vector<int> tmp; for(int i = 0 ; i <= mid ; i++)tmp.push_back(L[i]); if(ask(v,tmp))r = mid; else l = mid; } if(r == sz(L)){ //컴포넌트 분리됨 if(sz(v) < sz(L))return L; return v; //v는 clique } else{ ll idx = r; l = -1, r = sz(v); while(l+1 < r){ ll mid = l+r>>1; vector<int> tmp; for(int i = 0 ; i <= mid ; i++)tmp.push_back(v[i]); if(ask({L[idx]},tmp))r = mid; else l = mid; } ll idx2 = r; if(idx==0){ //둘이 합침 for(int i = (idx2+1)%sz(v), j = 0 ; j < sz(v) ; j++, i = (i+1)%sz(v)){ ret.push_back(v[i]); } for(auto i : L)ret.push_back(i); return ret; } //여기서 L[0]와 L.back()은 연결이 보장됨 for(int i = idx+1, j = 0 ; j < sz(L) ; j++, i = (i+1)%sz(L)){ ret.push_back(L[i]); } for(int i = idx2, j = 0 ; j < sz(v) ; j++, i = (i+1)%sz(v)){ ret.push_back(v[i]); } return ret; } }
#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...