제출 #894191

#제출 시각아이디문제언어결과실행 시간메모리
894191ByeWorldCave (IOI13_cave)C++14
100 / 100
219 ms720 KiB
#include "cave.h" #include <bits/stdc++.h> #define ll long long #define fi first #define se second using namespace std; typedef pair<int,int> pii; const int MAXN = 5e4+10; int n; int a[MAXN], con[MAXN], ty[MAXN]; bool skip[MAXN]; bool coba(int idx){ // for(int i=0; i<4; i++) cout << a[i] << ' '; // cout << '\n'; // cout << tryCombination(a) << " depan\n"; if(tryCombination(a) == idx) return 1; return 0; } void bin(int idx){ if(!coba(idx)){ //blm ada for(int i=0; i<n; i++){ if(skip[i]) continue; a[i] = 1-a[i]; } } //cout << idx << " idx\n"; int l=0, r=n-1, mid=0; while(l<r){ mid = (l+r)/2; for(int i=l; i<=mid; i++){ if(skip[i]) continue; a[i] = 1-a[i]; } int old_l = l, old_mid = mid; if(coba(idx)) l = mid+1; // ada di kanan else { // ada di kiri r = mid; } for(int i=old_l; i<=old_mid; i++){ // revert supaya paling depan == idx if(skip[i]) continue; a[i] = 1-a[i]; } } if(l!=r) assert(false); con[l] = idx; ty[l] = 1-a[l]; //cout << idx << ' ' << l << ' ' << ty[l] << " ty\n\n"; skip[l] = 1; a[l] = ty[l]; } void exploreCave(int N) { n = N; for(int i=0; i<n; i++){ // find levernya, up or down bin(i); } answer(ty, con); }
#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...