Submission #974044

#TimeUsernameProblemLanguageResultExecution timeMemory
974044bachhoangxuanFun Tour (APIO20_fun)C++17
47 / 100
106 ms15880 KiB
#include "fun.h" #include <bits/stdc++.h> using namespace std; std::vector<int> createFunTour(int N, int Q) { vector<int> P(N); int X=0,Min=N; for(int i=0;i<N;i++){ int sz=attractionsBehind(0,i); if(sz>N/2 && sz<Min) X=i,Min=sz; } vector<int> D(N),cc; for(int i=0;i<N;i++){ D[i]=hoursRequired(X,i); if(D[i]==1) cc.push_back(i); } int S=(int)cc.size(); vector<vector<int>> G(S); for(int i=0;i<N;i++){ if(i==X) continue; int j=0; while(j+1<S && hoursRequired(cc[j],i)+D[cc[j]]!=D[i]) j++; G[j].push_back(i); //cout << j << ' ' << i << '\n'; } for(int i=0;i<S;i++){ sort(G[i].begin(),G[i].end(),[&](int x,int y){ return D[x]<D[y]; }); } //cout << X << '\n'; int T=0; vector<int> A,B; if(S==2){ A=G[0];B=G[1]; if((int)A.size()>(int)B.size()) swap(A,B); } else{ int c=-1; while(T<N-1){ int Max=0; for(int i=0;i<S;i++) Max=max(Max,(int)G[i].size()); if(2*Max==N-T-1) break; int u=-1;Max=0; for(int i=0;i<S;i++){ if(c==i) continue; if(D[G[i].back()]>Max) Max=D[G[i].back()],u=i; } assert(u!=-1); P[T++]=G[u].back(); G[u].pop_back();c=u; } int u=-1; for(int i=0;i<S;i++) if(2*(int)G[i].size()==N-T-1) u=i; assert(u!=-1); for(int i=0;i<S;i++){ if(u==i) A=G[i]; else B.insert(B.end(),G[i].begin(),G[i].end()); } if(c!=u) swap(A,B); sort(A.begin(),A.end(),[&](int x,int y){ return D[x]<D[y]; }); sort(B.begin(),B.end(),[&](int x,int y){ return D[x]<D[y]; }); assert((int)A.size()==(int)B.size()); } while(!A.empty() || !B.empty()){ if(!B.empty()) P[T++]=B.back(),B.pop_back(); if(!A.empty()) P[T++]=A.back(),A.pop_back(); } P[T++]=X; //for(int i=0;i<N;i++) cout << P[i] << ' '; //cout << '\n'; return P; }
#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...