Submission #1277609

#TimeUsernameProblemLanguageResultExecution timeMemory
1277609avighnaChameleon's Love (JOI20_chameleon)C++20
40 / 100
17 ms472 KiB
#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 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...