Submission #1065480

#TimeUsernameProblemLanguageResultExecution timeMemory
1065480vjudge1Longest Trip (IOI23_longesttrip)C++17
100 / 100
13 ms600 KiB
#include "longesttrip.h" #include<bits/stdc++.h> using namespace std; int findit(vector<int>v,vector<int>vf){ if(v.size()==1)return v[0]; vector<int>v1,v2; for(auto i:v) v1.push_back(i), swap(v1,v2); if(are_connected(v1,vf)) return findit(v1,vf); return findit(v2,vf); } mt19937 rng(0); vector<int> longest_trip(int N, int D){ vector<int>path1,path2,v(N); iota(v.begin(),v.end(),0); shuffle(v.begin(),v.end(),rng); path1={v[0]},path2={v[1]}; for(int i=1;i*2+1<N;i++){ int U=v[i*2],V=v[i*2+1]; int a=are_connected({U},{path1.back()}); if(are_connected({U},{V})){ int b=are_connected({U},{path2.back()}); if(a) path1.push_back(U), path1.push_back(V); else if(b) path2.push_back(U), path2.push_back(V); else{ reverse(path2.begin(),path2.end()); for(auto i:path2) path1.push_back(i); path2 = {U,V}; } } else { if(!a) swap(U,V); path1.push_back(U); if(are_connected({path2.back()},{V})) path2.push_back(V); else {reverse(path2.begin(),path2.end()); for(auto i:path2) path1.push_back(i); path2 = {V}; } } } if(N%2){ int X=v.back(); int a=are_connected({X},{path1.back()}); int b=are_connected({X},{path2.back()}); if(a) path1.push_back(X); else if(b)path2.push_back(X); else{ reverse(path2.begin(),path2.end()); for(auto i:path2) path1.push_back(i); path2 = {X}; } } if(!are_connected(path1,path2)) return path1.size()>path2.size()?path1:path2; vector<int>A(1,path1[0]),B(1,path2[0]); if(path1.size()>1)A.push_back(path1.back()); if(path2.size()>1)B.push_back(path2.back()); if(are_connected(A,B)) for(int i=0;i<A.size();i++) for(int j=0;j<B.size();j++) if(are_connected({A[i]},{B[j]})) { if(!i)reverse(path1.begin(),path1.end()); if(j) reverse(path2.begin(),path2.end()); for(auto i:path2) path1.push_back(i); return path1; } int X=findit(path1,path2); int Y=findit(path2,{X}); while(path1.back()-X) path1.push_back(path1[0]), path1.erase(path1.begin()); while(path2[0]-Y) path2.push_back(path2[0]), path2.erase(path2.begin()); for(auto i:path2) path1.push_back(i); return path1; }

Compilation message (stderr)

longesttrip.cpp: In function 'std::vector<int> longest_trip(int, int)':
longesttrip.cpp:65:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   65 |         for(int i=0;i<A.size();i++)
      |                     ~^~~~~~~~~
longesttrip.cpp:66:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   66 |             for(int j=0;j<B.size();j++)
      |                         ~^~~~~~~~~
#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...