Submission #725096

#TimeUsernameProblemLanguageResultExecution timeMemory
725096danikoynovFun Tour (APIO20_fun)C++14
0 / 100
1 ms212 KiB
#include "fun.h" #include <bits/stdc++.h> using namespace std; const int maxn = 2e5 + 10; int sub[maxn], dis[maxn]; bool cmp(int a, int b) { return dis[a] < dis[b]; } vector<int> createFunTour(int N, int Q) { for (int i = 0; i < N; i ++) sub[i] = attractionsBehind(0, i); int centroid = 0; for (int i = 0; i < N; i ++) { if (sub[i] >= N / 2 && sub[i] < sub[centroid]) centroid = i; } for (int i = 0; i < N; i ++) dis[i] = hoursRequired(centroid, i); vector < int > cp[3]; int p[3]; p[0] = p[1] = p[2] = -1; for (int i = 0; i < N; i ++) { if (dis[i] == 1) { if (p[0] == -1) p[0] = i; else if (p[1] == -1) p[1] = i; else p[2] = i; } } for (int i = 0; i < N; i ++) { if (i == centroid) continue; if (i == p[0]) cp[0].push_back(i); else if (i == p[1]) cp[1].push_back(i); else if (i == p[2]) cp[2].push_back(i); else { if (hoursRequired(p[0], i) + 1 == dis[i]) cp[0].push_back(i); else if (hoursRequired(p[1], i) + 1 == dis[i]) cp[1].push_back(i); else cp[2].push_back(i); } } if (cp[0].size() < cp[1].size()) { swap(p[0], p[1]); swap(cp[0], cp[1]); } if (cp[0].size() < cp[2].size()) { swap(p[0], p[2]); swap(cp[0], cp[2]); } if (cp[1].size() < cp[2].size()) { swap(p[1], p[2]); swap(cp[1], cp[2]); } sort(cp[0].begin(), cp[0].end(), cmp); sort(cp[1].begin(), cp[1].end(), cmp); sort(cp[2].begin(), cp[2].end(), cmp); vector < int > ans; while(cp[0].size() < cp[1].size() + cp[2].size()) { ans.push_back(cp[1].back()); ans.push_back(cp[2].back()); cp[1].pop_back(); cp[2].pop_back(); } while(cp[2].size() > 0) { ans.push_back(cp[0].back()); ans.push_back(cp[1].back()); ans.push_back(cp[2].back()); cp[0].pop_back(); cp[1].pop_back(); cp[2].pop_back(); } while(cp[1].size() > 0) { ans.push_back(cp[0].back()); ans.push_back(cp[1].back()); cp[0].pop_back(); cp[1].pop_back(); } while(cp[0].size() > 0) { ans.push_back(cp[0].back()); cp[0].pop_back(); } ans.push_back(centroid); return ans; }
#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...