Submission #410846

#TimeUsernameProblemLanguageResultExecution timeMemory
410846DavidDamianCave (IOI13_cave)C++11
100 / 100
395 ms508 KiB
#include <iostream> #include "cave.h" using namespace std; int status[5005]; int door[5005]; int locked[5005]; ///Binary Search ///Update ranges ///Greedy void reset(int n, int L, int R, int correct) ///Set segment of array to correct { for (int i = L; i <= R; i++) { if (locked[i]) continue; status[i] = correct; } } int binarySearch(int n, int i, int correct) ///Perform binary search on i-th door { int L = 0, R = n - 1; while (L < R) { int mid = (L + R) / 2; reset(n, L, mid, correct); reset(n, mid + 1, R, !correct); if (tryCombination(status) != i) R = mid; else L = mid + 1; } return L; } void exploreCave(int N) { for (int i = 0; i < N; i++) { reset(N, 0, N, 0); int ans = tryCombination(status); //Obtain correct state for door int correct = (ans == i); int sw = binarySearch(N, i, correct); status[sw] = correct; door[sw] = i; locked[sw] = 1; //Mantain that door open in order to see beyond } answer(status, door); }
#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...