Submission #1289979

#TimeUsernameProblemLanguageResultExecution timeMemory
1289979lucaskojimaCave (IOI13_cave)C++17
100 / 100
230 ms556 KiB
#include "bits/stdc++.h" #include "cave.h" #define sz(x) (int)size(x) #define all(x) begin(x), end(x) #define rall(x) rbegin(x), rend(x) using namespace std; using ll = long long; using pii = pair<int, int>; const char nl = '\n'; const int INF = 0x3f3f3f3f; const ll LINF = 0x3f3f3f3f3f3f3f3f; const int N = 5000; int d[N], s[N], q[N]; void exploreCave(int n) { vector<int> door_switch(n); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) q[j] = 0; for (int j = 0; j < i; j++) { int id = door_switch[j]; q[id] = s[id]; } int pos = tryCombination(q); int t = ((pos == -1 || pos > i) ? 0 : 1); auto f = [&](auto f, int l, int r) -> int { if (l == r) return l; int m = (l + r) / 2; for (int j = 0; j < n; j++) q[j] = 1 - t; for (int j = l; j <= m; j++) q[j] = t; for (int j = 0; j < i; j++) { int id = door_switch[j]; q[id] = s[id]; } int ppos = tryCombination(q); if (ppos == -1 || ppos > i) return f(f, l, m); else return f(f, m + 1, r); }; door_switch[i] = f(f, 0, n - 1); d[door_switch[i]] = i; s[door_switch[i]] = t; } answer(s, d); }
#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...