제출 #260959

#제출 시각아이디문제언어결과실행 시간메모리
260959SamAnd동굴 (IOI13_cave)C++17
100 / 100
1631 ms884 KiB
#include "cave.h" #include <bits/stdc++.h> using namespace std; #define m_p make_pair #define fi first #define se second #define sz(x) ((int)(x).size()) #define all(x) (x).begin(),(x).end() const int N = 5003; int n; bool c[N]; int b[N], u[N]; int h[N]; int ans1[N], ans2[N]; void exploreCave(int n) { ::n = n; for (int i = 0; i < n; ++i) { for (int j = 0; j < i; ++j) { h[u[j]] = b[j]; } for (int j = 0; j < n; ++j) { if (!c[j]) h[j] = 0; } int p = tryCombination(h); if (p == i) b[i] = 1; else b[i] = 0; int l = 0, r = n - 1; while (l <= r) { int m = (l + r) / 2; for (int j = 0; j < i; ++j) { h[u[j]] = b[j]; } for (int j = 0; j <= m; ++j) { if (!c[j]) { h[j] = (b[i] ^ 1); } } for (int j = m + 1; j < n; ++j) { if (!c[j]) { h[j] = b[i]; } } int p = tryCombination(h); if (p == i) { u[i] = m; r = m - 1; } else l = m + 1; } c[u[i]] = true; } for (int i = 0; i < n; ++i) { ans1[u[i]] = b[i]; ans2[u[i]] = i; } answer(ans1, ans2); }
#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...