Submission #282472

#TimeUsernameProblemLanguageResultExecution timeMemory
282472rama_pangPark (JOI17_park)C++14
10 / 100
31 ms512 KiB
#include "park.h"
#include <bits/stdc++.h>
using namespace std;

static int Place[1400];

void Detect(int T, int N) {
  if (T == 1) {
    for (int i = 0; i < N; i++) {
      for (int j = i + 1; j < N; j++) {
        Place[i] = 1;
        Place[j] = 1;
        if (Ask(i, j, Place)) {
          Answer(i, j);
        }
        Place[i] = 0;
        Place[j] = 0;
      }
    }
  } else if (T == 2) {
    mt19937 rnd(12345);
    function<void(int, int, vector<int>)> Solve = [&](int l, int r, vector<int> cand) {
      if (cand.empty()) {
        return Answer(min(l, r), max(l, r));
      }
      memset(Place, 0, sizeof(Place));
      int m = cand[rnd() % cand.size()];
      for (auto i : cand) {
        Place[i] = 1;
      }
      Place[l] = Place[r] = 1;
      vector<int> lf, rg;
      for (auto i : cand) if (i != m) {
        Place[i] = 0;
        if (Ask(l, m, Place)) {
          rg.emplace_back(i);
        } else {
          lf.emplace_back(i);
        }
        Place[i] = 1;
      }
      Solve(m, r, rg);
      Solve(l, m, lf);
    };
    vector<int> cand;
    for (int i = 1; i + 1 < N; i++) {
      cand.emplace_back(i);
    }
    Solve(0, N - 1, cand);
  }
}
#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...