Submission #1195380

#TimeUsernameProblemLanguageResultExecution timeMemory
1195380avighnaMinerals (JOI19_minerals)C++20
40 / 100
16 ms6252 KiB
#include "minerals.h"
#include <vector>

void Solve(int n) {

  int old = Query(1);
  std::vector<int> distinct = {1}, repeated;
  for (int i = 2; i <= 2 * n; ++i) {
    int nval = Query(i);
    if (old != nval) {
      distinct.push_back(i);
    } else {
      repeated.push_back(i);
    }
    old = nval;
  }
  std::vector<int> p(2 * n + 1);
  for (int i = 1; i <= n; ++i) {
    p[i] = distinct[i - 1];
  }
  for (int i = n + 1; i <= 2 * n; ++i) {
    p[i] = repeated[i - n - 1];
  }
  for (int i = 1; i <= 2 * n; ++i) {
    Query(i);
  }
  auto query = [&](int i) {
    return Query(p[i]);
  };
  auto answer = [&](int a, int b) {
    Answer(p[a], p[b]);
  };

  std::vector bit_there(n + 1, std::vector<bool>(16));
  std::vector<std::vector<int>> groups(16);
  for (int i = 1; i <= n; ++i) {
    for (int bt = 0; bt < 16; ++bt) {
      if (i & (1 << bt)) {
        groups[bt].push_back(i);
      }
    }
  }
  for (int bt = 0; bt < 16; ++bt) {
    int old = -1;
    for (auto &i : groups[bt]) {
      old = query(i);
    }
    for (int i = n + 1; i <= 2 * n; ++i) {
      int nval = query(i);
      if (old == nval) {
        bit_there[i - n][bt] = true;
      }
      query(i);
    }
    for (auto &i : groups[bt]) {
      query(i);
    }
  }
  for (int i = 1; i <= n; ++i) {
    int back = 0;
    for (int bt = 0; bt < 16; ++bt) {
      back += (1 << bt) * bit_there[i][bt];
    }
    answer(back, i + n);
  }
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...