제출 #1076502

#제출 시각아이디문제언어결과실행 시간메모리
1076502juicy동굴 (IOI13_cave)C++17
100 / 100
254 ms856 KiB
#include "cave.h" #include <bits/stdc++.h> int S[5000], D[5000], q[5000]; bool taken[5000]; void exploreCave(int N) { memset(S, -1, sizeof(S)); auto flip = [&]() { for (int i = 0; i < N; ++i) { if (S[i] == -1) { q[i] ^= 1; } } }; int mi = 0; auto search = [&]() { while (taken[mi]) { mi++; } std::vector<int> cands; for (int i = 0; i < N; ++i) { if (S[i] != -1) { q[i] = S[i]; } else { cands.push_back(i); q[i] = 0; } } bool b = 0; if (tryCombination(q) == mi) { flip(); b = 1; } int l = 0, r = cands.size() - 1, p = -1; while (l <= r) { int md = (l + r) / 2; for (int i = 0; i <= md; ++i) { q[cands[i]] ^= 1; } if (tryCombination(q) == mi) { p = md; r = md - 1; } else { l = md + 1; } for (int i = 0; i <= md; ++i) { q[cands[i]] ^= 1; } } S[cands[p]] = b; D[cands[p]] = mi; taken[mi] = 1; }; int cnt = 0; while (cnt++ < N) { search(); } 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...