Submission #1140484

#TimeUsernameProblemLanguageResultExecution timeMemory
1140484LuvidiLongest Trip (IOI23_longesttrip)C++20
60 / 100
339 ms776 KiB
#include "longesttrip.h" #include <bits/stdc++.h> using namespace std; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); vector<int> f(int x,vector<int> v){ if(v.empty())return {x}; int idx=rng(); idx=abs(idx)%v.size(); vector<int> v1,v2; for(int i=0;i<v.size();i++)if(i!=idx){ if(are_connected({v[idx]},{v[i]}))v1.push_back(v[i]); else v2.push_back(v[i]); } v1=f(v[idx],v1); v1.push_back(x); for(int i:v2)v1.push_back(i); return v1; } std::vector<int> longest_trip(int n, int d) { vector<int> v1,v2; int idx=rng(); idx=abs(idx)%n; for(int i=0;i<n;i++)if(i!=idx){ if(are_connected({idx},{i}))v1.push_back(i); else v2.push_back(i); } v1=f(idx,v1); if(v2.empty())return v1; bool b1=are_connected({v1[0]},v2),b2=are_connected({v1.back()},v2); if(b1)reverse(v1.begin(),v1.end()); if(b1||b2){ int l=0,r=v2.size(); while(l<r){ int m=(l+r)/2; vector<int> v; for(int i=0;i<=m;i++)v.push_back(v2[i]); if(are_connected({v1.back()},v))r=m; else l=m+1; } v1.push_back(v2[l]); for(int j:v2)if(v2[l]!=j)v1.push_back(j); return v1; }else if(are_connected(v1,v2)){ int l=0,r=v1.size()-1; while(l<r){ int m=(l+r)/2; vector<int> v; for(int i=0;i<=m;i++)v.push_back(v1[i]); if(are_connected(v,v2))r=m; else l=m+1; } int idx=l; l=0,r=v2.size()-1; while(l<r){ int m=(l+r)/2; vector<int> v; for(int i=0;i<=m;i++)v.push_back(v2[i]); if(are_connected({v1[idx]},v))r=m; else l=m+1; } vector<int> ans; for(int k=idx+1;k<v1.size();k++)ans.push_back(v1[k]); for(int k=0;k<=idx;k++)ans.push_back(v1[k]); ans.push_back(v2[l]); for(int k:v2)if(v2[l]!=k)ans.push_back(k); return ans; } if(v1.size()>v2.size())return v1; return v2; }
#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...