#include "fun.h"
#include <bits/stdc++.h>
#define f first
#define s second
using namespace std;
vector<int> createFunTour(int N, int Q) {
int n = N;
int cen = 0;
if (n == 2)
return {0, 1};
for (int i = 1;i < n;i++) {
if (attractionsBehind(cen, i) * 2 >= n)
cen = i;
}
vector<int> dis(n);
for (int i = 0;i < n;i++) {
if (i == cen)
continue;
dis[i] = hoursRequired(cen, i);
}
vector<int> p;
for (int i = 0;i < n;i++) {
if (dis[i] == 1) {
p.push_back(i);
}
}
int m = p.size();
vector<int> ch[m];
for (int i = 0;i < n;i++) {
if (i == cen)
continue;
for (int j = 0;j < m;j++) {
if (j == m - 1) {
ch[j].push_back(i);
}
else {
int x = hoursRequired(p[j], i);
if (x + 1 == dis[i]) {
ch[j].push_back(i);
break;
}
}
}
}
for (int i = 0;i < m;i++) {
sort(ch[i].begin(), ch[i].end(), [&](int x, int y) {
return dis[x] < dis[y];
});
}
vector<int> ans;
auto Resi2 = [&](vector<int> s1, vector<int> s2) {
if (s1.size() > s2.size())
swap(s1, s2);
while (s2.size() + s1.size()) {
ans.push_back(s2.back());
s2.pop_back();
swap(s1, s2);
}
};
if (m == 2) {
Resi2(ch[0], ch[1]);
}
else {
int lst = -1, z = 0;
while (1) {
int u = 0, mx = 0;
for (int i = 0;i < m;i++) {
mx = max(mx, (int)ch[i].size());
u += ch[i].size();
}
if (mx >= u - mx)
break;
mx = 0;
z++;
int node = -1;
for (int j = 0;j < m;j++) {
if (j == lst)
continue;
if (dis[ch[j].back()] >= mx) {
mx = dis[ch[j].back()];
node = j;
}
}
assert(node != -1);
ans.push_back(ch[node].back());
ch[node].pop_back();
lst = node;
}
int bst = 0;
for (int i = 1;i < m;i++) {
if (ch[i].size() > ch[bst].size())
bst = i;
}
vector<int> all;
int pos = 0;
int mx = 0;
for (int i = 0;i < m;i++) {
if (i == lst)
continue;
if (dis[ch[i].back()] > mx) {
pos = i;
mx = dis[ch[i].back()];
}
}
if (pos != bst && dis[ch[pos].back()] > dis[ch[bst].back()] && z > 1) {
ans.push_back(ch[pos].back());
ch[pos].pop_back();
}
for (int i = 0;i < m;i++) {
if (i == bst)
continue;
for (auto u : ch[i])
all.push_back(u);
}
sort(all.begin(), all.end(), [&](int i, int j) {
return dis[i] < dis[j];
});
//assert(all.size() + 1 == ch[bst].size());
if (lst != bst)
Resi2(all, ch[bst]);
else
Resi2(ch[bst], all);
}
ans.push_back(cen);
return ans;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
0 ms |
344 KB |
Output is correct |
9 |
Correct |
0 ms |
348 KB |
Output is correct |
10 |
Correct |
0 ms |
348 KB |
Output is correct |
11 |
Correct |
0 ms |
348 KB |
Output is correct |
12 |
Correct |
0 ms |
348 KB |
Output is correct |
13 |
Correct |
0 ms |
348 KB |
Output is correct |
14 |
Correct |
0 ms |
348 KB |
Output is correct |
15 |
Correct |
1 ms |
348 KB |
Output is correct |
16 |
Correct |
0 ms |
348 KB |
Output is correct |
17 |
Correct |
0 ms |
348 KB |
Output is correct |
18 |
Correct |
0 ms |
348 KB |
Output is correct |
19 |
Correct |
0 ms |
348 KB |
Output is correct |
20 |
Correct |
0 ms |
344 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
0 ms |
344 KB |
Output is correct |
9 |
Correct |
0 ms |
348 KB |
Output is correct |
10 |
Correct |
0 ms |
348 KB |
Output is correct |
11 |
Correct |
0 ms |
348 KB |
Output is correct |
12 |
Correct |
0 ms |
348 KB |
Output is correct |
13 |
Correct |
0 ms |
348 KB |
Output is correct |
14 |
Correct |
0 ms |
348 KB |
Output is correct |
15 |
Correct |
1 ms |
348 KB |
Output is correct |
16 |
Correct |
0 ms |
348 KB |
Output is correct |
17 |
Correct |
0 ms |
348 KB |
Output is correct |
18 |
Correct |
0 ms |
348 KB |
Output is correct |
19 |
Correct |
0 ms |
348 KB |
Output is correct |
20 |
Correct |
0 ms |
344 KB |
Output is correct |
21 |
Correct |
0 ms |
344 KB |
Output is correct |
22 |
Correct |
0 ms |
348 KB |
Output is correct |
23 |
Correct |
0 ms |
348 KB |
Output is correct |
24 |
Correct |
1 ms |
348 KB |
Output is correct |
25 |
Correct |
0 ms |
348 KB |
Output is correct |
26 |
Correct |
0 ms |
348 KB |
Output is correct |
27 |
Correct |
0 ms |
348 KB |
Output is correct |
28 |
Correct |
0 ms |
348 KB |
Output is correct |
29 |
Correct |
0 ms |
348 KB |
Output is correct |
30 |
Correct |
0 ms |
348 KB |
Output is correct |
31 |
Correct |
0 ms |
348 KB |
Output is correct |
32 |
Correct |
0 ms |
348 KB |
Output is correct |
33 |
Correct |
0 ms |
348 KB |
Output is correct |
34 |
Correct |
1 ms |
348 KB |
Output is correct |
35 |
Correct |
0 ms |
348 KB |
Output is correct |
36 |
Correct |
1 ms |
348 KB |
Output is correct |
37 |
Correct |
0 ms |
348 KB |
Output is correct |
38 |
Correct |
1 ms |
420 KB |
Output is correct |
39 |
Correct |
0 ms |
348 KB |
Output is correct |
40 |
Correct |
0 ms |
348 KB |
Output is correct |
41 |
Correct |
0 ms |
348 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
0 ms |
344 KB |
Output is correct |
8 |
Correct |
0 ms |
348 KB |
Output is correct |
9 |
Correct |
0 ms |
344 KB |
Output is correct |
10 |
Correct |
0 ms |
348 KB |
Output is correct |
11 |
Correct |
0 ms |
348 KB |
Output is correct |
12 |
Correct |
1 ms |
348 KB |
Output is correct |
13 |
Correct |
0 ms |
348 KB |
Output is correct |
14 |
Correct |
0 ms |
348 KB |
Output is correct |
15 |
Correct |
0 ms |
348 KB |
Output is correct |
16 |
Correct |
1 ms |
348 KB |
Output is correct |
17 |
Correct |
1 ms |
348 KB |
Output is correct |
18 |
Correct |
85 ms |
15100 KB |
Output is correct |
19 |
Correct |
1 ms |
344 KB |
Output is correct |
20 |
Correct |
1 ms |
800 KB |
Output is correct |
21 |
Correct |
3 ms |
644 KB |
Output is correct |
22 |
Correct |
4 ms |
1116 KB |
Output is correct |
23 |
Correct |
8 ms |
2156 KB |
Output is correct |
24 |
Correct |
11 ms |
2908 KB |
Output is correct |
25 |
Correct |
47 ms |
8620 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
0 ms |
348 KB |
Output is correct |
9 |
Correct |
0 ms |
348 KB |
Output is correct |
10 |
Correct |
0 ms |
348 KB |
Output is correct |
11 |
Correct |
0 ms |
348 KB |
Output is correct |
12 |
Correct |
0 ms |
348 KB |
Output is correct |
13 |
Correct |
1 ms |
344 KB |
Output is correct |
14 |
Correct |
7 ms |
1628 KB |
Output is correct |
15 |
Correct |
91 ms |
14980 KB |
Output is correct |
16 |
Correct |
104 ms |
14800 KB |
Output is correct |
17 |
Correct |
17 ms |
3764 KB |
Output is correct |
18 |
Correct |
41 ms |
7176 KB |
Output is correct |
19 |
Correct |
67 ms |
11812 KB |
Output is correct |
20 |
Correct |
3 ms |
856 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
0 ms |
344 KB |
Output is correct |
9 |
Correct |
0 ms |
348 KB |
Output is correct |
10 |
Correct |
0 ms |
348 KB |
Output is correct |
11 |
Correct |
0 ms |
348 KB |
Output is correct |
12 |
Correct |
0 ms |
348 KB |
Output is correct |
13 |
Correct |
0 ms |
348 KB |
Output is correct |
14 |
Correct |
0 ms |
348 KB |
Output is correct |
15 |
Correct |
1 ms |
348 KB |
Output is correct |
16 |
Correct |
0 ms |
348 KB |
Output is correct |
17 |
Correct |
0 ms |
348 KB |
Output is correct |
18 |
Correct |
0 ms |
348 KB |
Output is correct |
19 |
Correct |
0 ms |
348 KB |
Output is correct |
20 |
Correct |
0 ms |
344 KB |
Output is correct |
21 |
Correct |
0 ms |
344 KB |
Output is correct |
22 |
Correct |
0 ms |
348 KB |
Output is correct |
23 |
Correct |
0 ms |
348 KB |
Output is correct |
24 |
Correct |
1 ms |
348 KB |
Output is correct |
25 |
Correct |
0 ms |
348 KB |
Output is correct |
26 |
Correct |
0 ms |
348 KB |
Output is correct |
27 |
Correct |
0 ms |
348 KB |
Output is correct |
28 |
Correct |
0 ms |
348 KB |
Output is correct |
29 |
Correct |
0 ms |
348 KB |
Output is correct |
30 |
Correct |
0 ms |
348 KB |
Output is correct |
31 |
Correct |
0 ms |
348 KB |
Output is correct |
32 |
Correct |
0 ms |
348 KB |
Output is correct |
33 |
Correct |
0 ms |
348 KB |
Output is correct |
34 |
Correct |
1 ms |
348 KB |
Output is correct |
35 |
Correct |
0 ms |
348 KB |
Output is correct |
36 |
Correct |
1 ms |
348 KB |
Output is correct |
37 |
Correct |
0 ms |
348 KB |
Output is correct |
38 |
Correct |
1 ms |
420 KB |
Output is correct |
39 |
Correct |
0 ms |
348 KB |
Output is correct |
40 |
Correct |
0 ms |
348 KB |
Output is correct |
41 |
Correct |
0 ms |
348 KB |
Output is correct |
42 |
Correct |
1 ms |
348 KB |
Output is correct |
43 |
Correct |
1 ms |
348 KB |
Output is correct |
44 |
Correct |
85 ms |
15100 KB |
Output is correct |
45 |
Correct |
1 ms |
344 KB |
Output is correct |
46 |
Correct |
1 ms |
800 KB |
Output is correct |
47 |
Correct |
3 ms |
644 KB |
Output is correct |
48 |
Correct |
4 ms |
1116 KB |
Output is correct |
49 |
Correct |
8 ms |
2156 KB |
Output is correct |
50 |
Correct |
11 ms |
2908 KB |
Output is correct |
51 |
Correct |
47 ms |
8620 KB |
Output is correct |
52 |
Correct |
1 ms |
344 KB |
Output is correct |
53 |
Correct |
7 ms |
1628 KB |
Output is correct |
54 |
Correct |
91 ms |
14980 KB |
Output is correct |
55 |
Correct |
104 ms |
14800 KB |
Output is correct |
56 |
Correct |
17 ms |
3764 KB |
Output is correct |
57 |
Correct |
41 ms |
7176 KB |
Output is correct |
58 |
Correct |
67 ms |
11812 KB |
Output is correct |
59 |
Correct |
3 ms |
856 KB |
Output is correct |
60 |
Correct |
106 ms |
15372 KB |
Output is correct |
61 |
Correct |
125 ms |
17868 KB |
Output is correct |
62 |
Correct |
106 ms |
15820 KB |
Output is correct |
63 |
Correct |
117 ms |
19660 KB |
Output is correct |
64 |
Correct |
122 ms |
19316 KB |
Output is correct |
65 |
Correct |
125 ms |
15564 KB |
Output is correct |
66 |
Correct |
146 ms |
17920 KB |
Output is correct |
67 |
Correct |
127 ms |
19576 KB |
Output is correct |
68 |
Correct |
147 ms |
18816 KB |
Output is correct |
69 |
Correct |
161 ms |
20144 KB |
Output is correct |
70 |
Correct |
105 ms |
15052 KB |
Output is correct |
71 |
Correct |
117 ms |
19020 KB |
Output is correct |
72 |
Correct |
145 ms |
18124 KB |
Output is correct |
73 |
Correct |
139 ms |
18796 KB |
Output is correct |
74 |
Correct |
155 ms |
19752 KB |
Output is correct |
75 |
Correct |
111 ms |
15816 KB |
Output is correct |
76 |
Correct |
117 ms |
19460 KB |
Output is correct |
77 |
Correct |
146 ms |
19576 KB |
Output is correct |
78 |
Correct |
133 ms |
18888 KB |
Output is correct |
79 |
Correct |
143 ms |
19912 KB |
Output is correct |
80 |
Correct |
154 ms |
20424 KB |
Output is correct |
81 |
Correct |
113 ms |
15044 KB |
Output is correct |
82 |
Correct |
112 ms |
15052 KB |
Output is correct |
83 |
Correct |
126 ms |
15240 KB |
Output is correct |
84 |
Correct |
47 ms |
6568 KB |
Output is correct |