제출 #764907

#제출 시각아이디문제언어결과실행 시간메모리
764907fatemetmhr동굴 (IOI13_cave)C++17
100 / 100
464 ms536 KiB
// ~ Be Name Khoda ~ // #include "cave.h" #include <bits/stdc++.h> //#pragma GCC optimize ("O3") //#pragma GCC target("avx2") //#pragma GCC optimize("unroll-loops,Ofast") using namespace std; typedef long long ll; #define pb push_back #define mp make_pair #define all(x) x.begin(), x.end() #define fi first #define se second const int maxn = 1e6 + 10; const int maxn5 = 5e3 + 10; const int maxnt = 1.2e6 + 10; const int maxn3 = 1e3 + 10; const int mod = 1e9 + 7; const ll inf = 1e18; int n, ask[maxn5], mat[maxn5]; int cor[maxn5], av[maxn5]; bool det[maxn5]; inline int check(int l, int r, int ty){ for(int i = 0; i < n; i++){ if(det[i]) ask[i] = cor[i]; else ask[i] = (l > i || i >= r) ^ ty; } return tryCombination(ask); } void exploreCave(int N) { n = N; memset(det, false, sizeof det); for(int i = 0; i < n; i++){ int pt = 0; for(int j = 0; j < n; j++){ if(!det[j]){ av[pt++] = j; ask[j] = true; } else ask[j] = cor[j]; } av[pt] = maxn5; int last = tryCombination(ask); bool ty = (last != i); int lo = 0, hi = pt; while(hi - lo > 1){ int mid = (lo + hi) >> 1; if(i != check(av[lo], av[mid], ty)) hi = mid; else lo = mid; } cor[av[lo]] = ty; mat[av[lo]] = i; det[av[lo]] = true; //cout << "found " << i << ' ' << ty << ' ' << lo << ' ' << hi << ' ' << pt << ' ' << av[lo] << endl; } answer(cor, mat); }
#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...