Submission #1060252

#TimeUsernameProblemLanguageResultExecution timeMemory
1060252MilosMilutinovicPark (JOI17_park)C++14
67 / 100
235 ms864 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; vector<vector<int>> g(n); 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; } else { low = mid + 1; } } Solve(p); } vector<int> que(1, 0); for (int b = 0; b < (int) que.size(); b++) { int i = que[b]; for (int j : g[i]) { que.push_back(j); } } int low = 0, high = (int) que.size() - 1, p = -1; while (low <= high) { int mid = (low + high) >> 1; for (int i = 0; i < n; i++) { Place[i] = 0; } for (int i = 0; i <= mid; i++) { Place[que[i]] = 1; } Place[v] = 1; if (Ask(0, v, Place)) { p = que[mid]; high = mid - 1; } else { low = mid + 1; } } g[p].push_back(v); 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...