Submission #374996

#TimeUsernameProblemLanguageResultExecution timeMemory
374996Alex_tz307동굴 (IOI13_cave)C++17
100 / 100
1049 ms748 KiB
#include <bits/stdc++.h> #include "cave.h" using namespace std; const int NMAX = 5000; int states[NMAX], doors[NMAX], query_states[NMAX]; bool found[NMAX]; bool opens(int ans, int door) { if(ans == -1) return true; return ans > door; } void exploreCave(int N) { for(int i = 0; i < N; ++i) { for(int j = 0; j < N; ++j) if(found[j]) query_states[j] = states[j]; else query_states[j] = 1; int ans = tryCombination(query_states); bool colour = opens(ans, i); int st = 0, dr = N - 1; while(st < dr) { int mid = (st + dr) >> 1; for(int j = 0; j < N; ++j) if(found[j]) query_states[j] = states[j]; else if(st <= j && j <= mid) query_states[j] = colour; else query_states[j] = colour ^ 1; int ans = tryCombination(query_states); if(opens(ans, i)) dr = mid; else st = mid + 1; } found[st] = true, states[st] = colour, doors[st] = i; } answer(states, doors); }
#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...