Submission #725099

#TimeUsernameProblemLanguageResultExecution timeMemory
725099danikoynovFun Tour (APIO20_fun)C++14
0 / 100
1 ms340 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 + 1) / 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); } } /**for (int v : cp[0]) cout << v << " "; cout << endl; for (int v : cp[1]) cout << v << " "; cout << endl; for (int v : cp[2]) cout << v << " "; cout << endl;*/ 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; int last = -1; while(ans.size() != N - 1) { int cur = -1; if (last != 0 && (cur == -1 || cp[0].size() > cp[cur].size())) cur = 0; if (last != 1 && (cur == -1 || cp[1].size() > cp[cur].size())) cur = 1; if (last != 2 && (cur == -1 || cp[2].size() > cp[cur].size())) cur = 2; ans.push_back(cp[cur].back()); cp[cur].pop_back(); last = cur; } /**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()); cp[0].pop_back(); ans.push_back(cp[0].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); /*cout << "tour" << endl; for (int v : ans) cout << v << " "; cout << endl;*/ return ans; }

Compilation message (stderr)

fun.cpp: In function 'std::vector<int> createFunTour(int, int)':
fun.cpp:101:22: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
  101 |     while(ans.size() != N - 1)
      |           ~~~~~~~~~~~^~~~~~~~
#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...