Submission #1259332

#TimeUsernameProblemLanguageResultExecution timeMemory
1259332sokratisiCave (IOI13_cave)C++20
0 / 100
2 ms580 KiB
#include "cave.h" #include <vector> #include <set> using namespace std; set<int> use; int n; pair<int, int> bsearch(int i, int s[]) { vector<int> t; for (auto u: use) t.push_back(u); int cntrl = tryCombination(s); int sv; int l = 0, r = t.size()-1; while(l < r) { int m = (l + r) / 2; int ts[n]; for (int i = 0; i < n; i++) ts[i] = s[i]; for (int i = l; i <= m; i++) { ts[t[i]] = 1-ts[t[i]]; int ans = tryCombination(ts); sv = ans; if (cntrl == i && ans > i) r = m; else if (cntrl > i && ans == i) r = m; else l = m + 1; } } // the switch is t[l] int corpos; if (cntrl > i) corpos = s[t[l]]; else corpos = 1 - s[t[l]]; return {t[l], corpos}; } void exploreCave(int N) { n = N; int s[n], d[n]; for (int i = 0; i < n; i++) use.insert(i); for (int i = 0; i < n; i++) { pair<int, int> ans = bsearch(i, s); use.erase(ans.first); s[ans.first] = ans.second; d[ans.first] = i; } 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...