#include <bits/stdc++.h>
using namespace std;
#include "library.h"
const int N = 1000;
vector<int> adj[N];
vector<int> m, pos, res;
vector<pair<int, bool>> v;
bool isEnd[N];
int n_;
void dfs(int v, int p = -1) {
res.push_back(v + 1);
for (int i : adj[v]) {
if (i != p)
dfs(i, v);
}
}
int get() {
int ans = 0;
for (int i = 0; i < n_; i++) {
if (adj[i].size() == 1 && !isEnd[i])
ans = i;
}
return ans;
}
int find(int num, int l, int r) {
if (l == r) {
m[num] = 1;
m[pos[l]] = 1;
if (Query(m) == 1)
return pos[l];
else
return -1;
}
int mid = (l + r) / 2;
for (int i = l; i <= mid; i++)
m[pos[i]] = 1;
m[num] = 1;
int a1 = Query(m);
m[num] = 0;
int a2 = Query(m);
for (int i = l; i <= mid; i++)
m[pos[i]] = 0;
if (a2 < a1)
return find(num, mid + 1, r);
else
return find(num, l, mid);
}
void Solve(int n) {
if (n == 1) {
vector<int> res = {1};
Answer(res);
return;
}
n_ = n;
m.resize(n, 0);
for (int i = 0; i < n; i++)
v.emplace_back(i, true);
for (int i = 0; i < n - 1;) {
int num = get();
pos.clear();
for (auto j : v) {
if (j.second && j.first != num)
pos.push_back(j.first);
}
fill(m.begin(), m.end(), 0);
int ans = find(num, 0, (int)pos.size() - 1);
if (ans != -1)
adj[num].push_back(ans), adj[ans].push_back(num), i++, v[num].second = false, v[ans].second = false;
else
isEnd[num] = true;
}
int end1 = -1;
for (int i = 0; i < n; i++) {
if (isEnd[i] || adj[i].size() == 1)
end1 = i;
}
dfs(end1);
for (int i : res)
assert(i <= n);
Answer(res);
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
43 ms |
504 KB |
# of queries: 2588 |
2 |
Correct |
47 ms |
400 KB |
# of queries: 2585 |
3 |
Correct |
32 ms |
424 KB |
# of queries: 2694 |
4 |
Correct |
44 ms |
504 KB |
# of queries: 2710 |
5 |
Correct |
36 ms |
396 KB |
# of queries: 2712 |
6 |
Correct |
44 ms |
396 KB |
# of queries: 2724 |
7 |
Correct |
40 ms |
384 KB |
# of queries: 2736 |
8 |
Correct |
43 ms |
384 KB |
# of queries: 2581 |
9 |
Correct |
40 ms |
384 KB |
# of queries: 2703 |
10 |
Correct |
27 ms |
396 KB |
# of queries: 1593 |
11 |
Correct |
4 ms |
384 KB |
# of queries: 0 |
12 |
Correct |
5 ms |
384 KB |
# of queries: 1 |
13 |
Correct |
4 ms |
384 KB |
# of queries: 5 |
14 |
Correct |
5 ms |
384 KB |
# of queries: 9 |
15 |
Correct |
5 ms |
384 KB |
# of queries: 86 |
16 |
Correct |
8 ms |
384 KB |
# of queries: 213 |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
43 ms |
504 KB |
# of queries: 2588 |
2 |
Correct |
47 ms |
400 KB |
# of queries: 2585 |
3 |
Correct |
32 ms |
424 KB |
# of queries: 2694 |
4 |
Correct |
44 ms |
504 KB |
# of queries: 2710 |
5 |
Correct |
36 ms |
396 KB |
# of queries: 2712 |
6 |
Correct |
44 ms |
396 KB |
# of queries: 2724 |
7 |
Correct |
40 ms |
384 KB |
# of queries: 2736 |
8 |
Correct |
43 ms |
384 KB |
# of queries: 2581 |
9 |
Correct |
40 ms |
384 KB |
# of queries: 2703 |
10 |
Correct |
27 ms |
396 KB |
# of queries: 1593 |
11 |
Correct |
4 ms |
384 KB |
# of queries: 0 |
12 |
Correct |
5 ms |
384 KB |
# of queries: 1 |
13 |
Correct |
4 ms |
384 KB |
# of queries: 5 |
14 |
Correct |
5 ms |
384 KB |
# of queries: 9 |
15 |
Correct |
5 ms |
384 KB |
# of queries: 86 |
16 |
Correct |
8 ms |
384 KB |
# of queries: 213 |
17 |
Correct |
437 ms |
504 KB |
# of queries: 18202 |
18 |
Correct |
434 ms |
416 KB |
# of queries: 17903 |
19 |
Correct |
432 ms |
480 KB |
# of queries: 18178 |
20 |
Correct |
399 ms |
504 KB |
# of queries: 16934 |
21 |
Correct |
365 ms |
504 KB |
# of queries: 15985 |
22 |
Correct |
442 ms |
664 KB |
# of queries: 18156 |
23 |
Correct |
422 ms |
504 KB |
# of queries: 18129 |
24 |
Correct |
152 ms |
384 KB |
# of queries: 8317 |
25 |
Correct |
424 ms |
608 KB |
# of queries: 17719 |
26 |
Correct |
375 ms |
668 KB |
# of queries: 16553 |
27 |
Correct |
151 ms |
504 KB |
# of queries: 8279 |
28 |
Correct |
464 ms |
580 KB |
# of queries: 18933 |
29 |
Correct |
444 ms |
480 KB |
# of queries: 18912 |
30 |
Correct |
466 ms |
508 KB |
# of queries: 18933 |