Submission #220092

#TimeUsernameProblemLanguageResultExecution timeMemory
220092rama_pangMinerals (JOI19_minerals)C++14
90 / 100
72 ms3968 KiB
#include "minerals.h"
#include <bits/stdc++.h>
using namespace std;

bool query(int x) {
  static int last = -1;
  int cur = Query(x);
  bool res = (cur == last);
  last = cur;
  return res;
}

void Solve(vector<int> A, vector<int> B, bool isBFull) {
  int n = A.size();
  if (n == 0) return;
  if (n == 1) return Answer(A[0], B[0]);

  int piv = n / 2;
  vector<int> Aleft, Aright;
  vector<int> Bleft, Bright;

  if (isBFull) { // All of B is in the box, so we remove the second half
    for (int i = piv; i < n; i++) {
      query(B[i]); // remove elements in B such that only the first half remains 
    }
  } else { // None of B is in the box, so we add the first half
    for (int i = 0; i < piv; i++) {
      query(B[i]); // add elemens in B such that only the first half remains
    }
  }

  for (int i = 0; i < n; i++) {
    if (Aright.size() == n - piv) {
      Aleft.emplace_back(A[i]);
    } else if (Aleft.size() == piv) {
      Aright.emplace_back(A[i]);
    } else if (query(A[i])) {
      Aleft.emplace_back(A[i]); // A[i] has a match is in the first half of B
    } else {
      Aright.emplace_back(A[i]); // A[i] has a match in the second half of B
    }
  }

  for (int i = 0; i < piv; i++) Bleft.emplace_back(B[i]);
  for (int i = piv; i < n; i++) Bright.emplace_back(B[i]);

  return Solve(Aleft, Bleft, true), Solve(Aright, Bright, false);
}

void Solve(int N) {
  vector<int> A, B;
  for (int i = 1; i <= 2 * N; i++) {
    if (query(i)) { // the current element is already in the box
      B.emplace_back(i);
    } else { // the current element is a new element
      A.emplace_back(i);
    }
  }

  return Solve(A, B, true);
}

Compilation message (stderr)

minerals.cpp: In function 'void Solve(std::vector<int>, std::vector<int>, bool)':
minerals.cpp:33:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if (Aright.size() == n - piv) {
         ~~~~~~~~~~~~~~^~~~~~~~~~
minerals.cpp:35:29: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     } else if (Aleft.size() == piv) {
                ~~~~~~~~~~~~~^~~~~~
#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...