Submission #1060244

#TimeUsernameProblemLanguageResultExecution timeMemory
1060244MilosMilutinovicPark (JOI17_park)C++14
0 / 100
102 ms496 KiB
#include "park.h"
#include <bits/stdc++.h>

using namespace std;

static int Place[1400];

void Detect(int T, int n) {
  vector<bool> done(n);
  done[0] = true;
  function<void(int)> Solve = [&](int v) {
    if (done[v]) {
      return;
    }
    while (true) {
      for (int i = 0; i < n; i++) {
        Place[i] = done[i] ? 1 : 0;
      }
      Place[v] = 1;
      if (Ask(0, v, Place)) {
        break;
      }
      int low = 0, high = n - 1, p = -1;
      while (low <= high) {
        int mid = (low + high) >> 1;
        for (int i = 0; i < n; i++) {
          if (done[i] || i == v || i <= mid) {
            Place[i] = 1;
          } else {
            Place[i] = 0;
          }
        }
        if (Ask(0, v, Place)) {
          p = mid;
          high = mid - 1;
        }
      }
      Solve(p);
    }
    int low = 0, high = n - 1, p = -1;
    while (low <= high) {
      int mid = (low + high) >> 1;
      for (int i = 0; i < n; i++) {
        if (i <= mid && done[i]) {
          Place[i] = 1;
        } else {
          Place[i] = 0;
        }
      }
      Place[v] = 1;
      if (Ask(0, v, Place)) {
        p = mid;
        high = mid - 1;
      } else {
        low = mid + 1;
      }
    }
    Answer(min(p, v), max(p, v));
    done[v] = true;
  };
  for (int i = 1; i < n; i++) {
    if (!done[i]) {
      Solve(i);
    }
  }
}
#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...