Submission #302082

#TimeUsernameProblemLanguageResultExecution timeMemory
302082BlancaHMCave (IOI13_cave)C++14
100 / 100
366 ms640 KiB
#include "cave.h" #include <iostream> #include <fstream> #include <cfloat> #include <iomanip> #include <vector> #include <algorithm> #include <queue> #include <stack> #include <cstring> #include <cmath> #include <climits> #include <set> #include <map> #include <unordered_set> #include <unordered_map> using namespace std; typedef pair<int, int> pii; typedef long long int ll; typedef vector<int> vi; typedef vector<vi> vvi; typedef vector<vvi> vvvi; typedef vector<vvvi> vvvvi; typedef vector<pii> vpii; typedef vector<vpii> vvpii; typedef vector<ll> vl; typedef vector<vl> vvl; typedef vector<vvl> vvvl; typedef vector<vvvl> vvvvl; typedef vector<string> vs; #define fir first #define sec second #define pb push_back #define eb emplace_back #define ppb pop_back #define pf push_front #define ppf pop_front #define mp make_pair #define len(v) ((int)v.size()) #define all(v) v.begin(), v.end() void flip(int & a) { a = 1 - a; } void exploreCave(int N) { int finalS[N], finalD[N], switchComb[N]; memset(finalS, -1, sizeof(finalS)); memset(finalD, -1, sizeof(finalD)); memset(switchComb, 0, sizeof(switchComb)); int val, curVal, lo, hi, mid; if (N == 1) { val = tryCombination(switchComb); if (val == 0) finalS[0] = 1; else finalS[0] = 0; finalD[0] = 0; answer(finalS, finalD); return; } pii ans = mp(0, 0); for (int i = 0; i < N; i++) { val = tryCombination(switchComb); if (val == -1) val = N; lo = 0; hi = N-1; while(lo < hi) { mid = lo + (hi-lo)/2; for (int j = lo; j <= mid; j++) if (finalD[j] == -1) flip(switchComb[j]); curVal = tryCombination(switchComb); for (int j = lo; j <= mid; j++) if (finalD[j] == -1) flip(switchComb[j]); if (curVal == -1) curVal = N; if (curVal > i) { if (val <= i) { hi = mid; ans = mp(mid, 1 - switchComb[mid]); } else { lo = mid+1; ans = mp(mid+1, switchComb[mid+1]); } } else { if (val <= i) { lo = mid+1; ans = mp(mid+1, 1-switchComb[mid+1]); } else { hi = mid; ans = mp(mid, switchComb[mid]); } } } finalD[ans.first] = i; finalS[ans.first] = ans.second; switchComb[ans.first] = ans.second; } answer(finalS, finalD); }
#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...