제출 #1301972

#제출 시각아이디문제언어결과실행 시간메모리
1301972marlesamtamCave (IOI13_cave)C++20
100 / 100
496 ms560 KiB
#include "cave.h" #include <bits/stdc++.h> using namespace std; void exploreCave(int N) { vector<int> S(N, 0), D(N, -1); vector<int> fixedState(N, -1); vector<int> rem; rem.reserve(N); for (int i = 0; i < N; i++) rem.push_back(i); for (int door = 0; door < N; door++) { for (int i = 0; i < N; i++) { if (fixedState[i] != -1) S[i] = fixedState[i]; else S[i] = 0; } int r = tryCombination(S.data()); int need = (r == door ? 1 : 0); int lo = 0, hi = (int)rem.size() - 1; while (lo < hi) { int mid = (lo + hi) >> 1; for (int i = 0; i < N; i++) { if (fixedState[i] != -1) S[i] = fixedState[i]; else S[i] = (need ^ 1); } for (int k = lo; k <= mid; k++) S[rem[k]] = need; int x = tryCombination(S.data()); bool ok = (x == -1 || x > door); if (ok) hi = mid; else lo = mid + 1; } int sw = rem[lo]; fixedState[sw] = need; D[sw] = door; rem.erase(rem.begin() + lo); } for (int i = 0; i < N; i++) S[i] = fixedState[i]; answer(S.data(), D.data()); }
#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...