Submission #768846

#TimeUsernameProblemLanguageResultExecution timeMemory
768846Ludissey동굴 (IOI13_cave)C++14
100 / 100
340 ms424 KiB
#include "cave.h" #include <iostream> #include <string> #include <set> #include <map> #include <cstring> #include <unordered_map> #include <vector> #include <fstream> #include <bitset> #include <tuple> #include <cmath> #include <cstdint> #include <stack> #include <cassert> #include <cstdio> #include <queue> #include <iterator> #include <iomanip> #include <algorithm> #include <sstream> using namespace std; int S[100000] = {0}; int S0[100000] = { 0 }; int S1[100000] = { 0 }; int D[100000] = { 0 }; void exploreCave(int N) { int crack = 0; for (int i = 0; i < N; i++) { S[i] = 1; D[i] = 0; } /* while (crack < N) { S[crack] = 1 - S[crack]; crack = tryCombination(S); if (crack == -1) break; }*/ vector<bool> visited(N); while (crack < N) { int l=0, r=N-1; int comb = 0; for (int i = l; i <= r; i++) { if (!visited[i]) { S[i] = 0; } } int res = tryCombination(S); if (res == crack) { comb = 1; for (int i = l; i <= r; i++) { if (!visited[i]) { S[i] = 1; } } } while (l < r) { int mid = (l + r) / 2; for (int i = l; i <= r; i++) { if (!visited[i]) { if (i>mid) { S[i] = 1-comb; } else { S[i] = comb; } } } res = tryCombination(S); if (res > crack || res == -1) { r = mid; } else { for (int i = l; i <= mid; i++) { if (!visited[i]) S[i] = 1-comb; } l = mid+1; } } S[l] = comb; visited[l] = true; D[l] = crack; crack++; } 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...