제출 #1177127

#제출 시각아이디문제언어결과실행 시간메모리
1177127alexander707070Longest Trip (IOI23_longesttrip)C++20
85 / 100
6 ms432 KiB
#include<bits/stdc++.h> #include "longesttrip.h" using namespace std; int n,d; vector<int> l,r; bool query(vector<int> a,vector<int> b){ return are_connected(a,b); } vector<int> longest_trip(int N, int D){ n=N; d=D; l.clear(); r.clear(); l.push_back(0); if(query({0},{1})){ l.push_back(1); }else{ r.push_back(1); } for(int i=2;i<n;i++){ if(query({l.back()},{i})){ l.push_back(i); if(!r.empty() and query({r.back()},{i})){ while(!r.empty()){ l.push_back(r.back()); r.pop_back(); } } }else{ r.push_back(i); } } if(d==1){ if(r.empty())return l; if(!query(l,r)){ if(l.size()>r.size())return l; else return r; }else{ if(query({l.front()},{r.back()})){ for(int i:l)r.push_back(i); return r; } if(query({r.front()},{l.back()})){ for(int i:r)l.push_back(i); return l; } if(query({l.front()},{r.front()})){ reverse(l.begin(),l.end()); for(int i:r)l.push_back(i); return l; } int ll=-1,rr=int(l.size())-1,mid; while(ll+1<rr){ mid=(ll+rr)/2; vector<int> w; for(int i=0;i<=mid;i++)w.push_back(l[i]); if(query(w,r)){ rr=mid; }else{ ll=mid; } } int from=rr; vector<int> cutl; for(int i=0;i<=from;i++)cutl.push_back(l[i]); ll=-1; rr=int(r.size())-1; while(ll+1<rr){ mid=(ll+rr)/2; vector<int> w; for(int i=0;i<=mid;i++)w.push_back(r[i]); if(query(cutl,w)){ rr=mid; }else{ ll=mid; } } int to=rr; vector<int> path; for(int i=from+1;i<l.size();i++)path.push_back(l[i]); for(int i=0;i<=from;i++)path.push_back(l[i]); for(int i=to;i<r.size();i++)path.push_back(r[i]); for(int i=0;i<to;i++)path.push_back(r[i]); return path; } }else{ for(int i:l)r.push_back(i); return r; } return {}; }
#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...