Submission #1137500

#TimeUsernameProblemLanguageResultExecution timeMemory
1137500anmattroi동굴 (IOI13_cave)C++20
100 / 100
511 ms552 KiB
#include "cave.h" #include <bits/stdc++.h> using namespace std; int n; int A[5005], D[5005], dd[5005]; int p[5005]; void solve(int idx) { int T[n]; for (int i = 0; i < idx; i++) T[D[i]] = A[i]; for (int i = 0; i < n; i++) if (!dd[i]) T[i] = 0; int p = tryCombination(T); if (p == -1) p = n; if (idx < p) A[idx] = 0; else A[idx] = 1; int l = 0, r = n-1; while (l != r) { int mid = (l + r) >> 1; for (int i = 0; i < n; i++) if (!dd[i]) T[i] = 1-A[idx]; for (int i = l; i <= mid; i++) if (!dd[i]) T[i] = A[idx]; int p = tryCombination(T); if (p == -1) p = n; if (idx < p) r = mid; else l = mid+1; } D[idx] = r; dd[r] = 1; } void exploreCave(int N) { n = N; fill(A, A + n, -1); for (int i = 0; i < n; i++) solve(i); for (int i = 0; i < n; i++) p[i] = i; int H[N], L[N]; for (int i = 0; i < N; i++) L[D[i]] = i; for (int i = 0; i < N; i++) H[i] = A[L[i]]; answer(H, L); }
#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...