Submission #1208576

#TimeUsernameProblemLanguageResultExecution timeMemory
1208576pera동굴 (IOI13_cave)C++20
0 / 100
166 ms580 KiB
#include<bits/stdc++.h> #include "cave.h" using namespace std; void exploreCave(int N) { int S[N] , D[N] , W[N]; memset(S , 0 , sizeof(S)); memset(W , 0 , sizeof(W)); int u; vector<int> v; for(int i = 0;i < N;i ++){ v.push_back(i); } while(true){ u = tryCombination(W); if(u == -1){ break; } auto assign = [&](int m){ for(int i = 0;i <= m;i ++){ W[v[i]] = 1; } int A = tryCombination(W); for(int i = 0;i <= m;i ++){ W[v[i]] = 0; } return (A != u); }; int l = 0 , r = (int)v.size() - 1 , ans = -1; while(l <= r){ int m = (l + r) / 2; if(assign(m)){ ans = m; r = m - 1; }else{ l = m + 1; } } ans = v[ans]; v.erase(find(v.begin() , v.end() , ans)); S[ans] = W[ans] = 1; D[ans] = u; } for(int i = 0;i < N;i ++){ W[i] = 1; } while(!v.empty()){ auto assign = [&](int m){ for(int i = 0;i <= m;i ++){ W[v[i]] = 0; } int A = tryCombination(W); for(int i = 0;i <= m;i ++){ W[v[i]] = 1; } return (A != u); }; int l = 0 , r = (int)v.size() - 1 , ans; while(l <= r){ int m = (l + r) / 2; if(assign(m)){ ans = m; r = m - 1; }else{ l = m + 1; } } ans = v[ans]; v.erase(find(v.begin() , v.end() , ans)); S[ans] = W[ans] = 0; D[ans] = u; } answer(S , D); return; }
#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...