#include <bits/stdc++.h>
int Query(const std::vector<int> &p);
void Answer(int a, int b);
void Solve(int N) {
std::vector<std::vector<int>> adj(2 * N + 1), ans(2 * N + 1);
for (int i = 1; i <= 2 * N; ++i) {
for (int j = 1; j <= 2 * N; ++j) {
if (i == j) {
continue;
}
if (Query({i, j}) == 1) {
adj[i].push_back(j);
ans[i].push_back(j);
}
}
}
auto remove = [&](int u, int v) {
auto it1 = std::find(ans[u].begin(), ans[u].end(), v);
auto it2 = std::find(ans[v].begin(), ans[v].end(), u);
if (it1 != ans[u].end()) {
ans[u].erase(it1);
}
if (it2 != ans[v].end()) {
ans[v].erase(it2);
}
};
for (int u = 1; u <= 2 * N; ++u) {
if (adj[u].size() == 1) {
continue;
}
int a = adj[u][0], b = adj[u][1], c = adj[u][2];
if (Query({u, a, b}) == 1) {
remove(u, c);
} else if (Query({u, a, c}) == 1) {
remove(u, b);
} else {
remove(u, a);
}
}
for (int i = 1; i <= 2 * N; ++i) {
if (i < ans[i][0]) {
Answer(i, ans[i][0]);
}
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |