Submission #1304900

#TimeUsernameProblemLanguageResultExecution timeMemory
1304900kaloyanCave (IOI13_cave)C++20
100 / 100
459 ms532 KiB
#include "cave.h" #include <iostream> #include <algorithm> #include <vector> #include <cassert> const int MAXN = 5000; int n; int answered[MAXN]; int bind[MAXN]; int lever[MAXN]; int tryCombination(int S[]); void answer(int S[], int D[]); void flip(int arr[], int idx) { for(int i = 0 ; i <= idx ; ++i) { if(answered[i]) { continue; } arr[i] ^= 1; } } bool f(int doorIdx, bool wasClosed, int leverIdx) { flip(lever, leverIdx); int res = tryCombination(lever); flip(lever, leverIdx); if(wasClosed) { return res != doorIdx; } else { return res == doorIdx; } } void exploreCave(int N) { n = N; std::fill(answered, answered + n, 0); std::fill(lever, lever + n, 0); for(int i = 0 ; i < n ; ++i) { bool isClosed = (tryCombination(lever) == i); int l = -1, r = n - 1; while(l + 1 < r) { int mid = (l + r) / 2; if(!f(i, isClosed, mid)) l = mid; else r = mid; } //std::cout << i << " " << r << "\n"; answered[r] = 1; bind[r] = i; if(isClosed) { lever[r] ^= 1; } } answer(lever, bind); }
#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...