제출 #97875

#제출 시각아이디문제언어결과실행 시간메모리
97875MiricaMatei동굴 (IOI13_cave)C++14
0 / 100
361 ms492 KiB
#include <bits/stdc++.h> #include "cave.h" using namespace std; const int MAXN = 5005; int v[MAXN]; int v1[MAXN]; int p[MAXN]; int liber[MAXN]; /*int tryCombination(int* v, int n) { for (int i = 0; i < n; ++i) printf("%d ", v[i]); printf("\n"); int x; scanf("%d", &x); return x; } void answer(int* v, int* p, int n) { for (int i = 0; i < n; ++i) printf("%d ", v[i]); printf("\n"); for (int i = 0; i < n; ++i) printf("%d ", p[i]); printf("\n"); }*/ void exploreCave(int N) { int disp = N; for (int i = 1; i <= N; ++i) liber[i] = i - 1; for (int i = 0; i < N; ++i) { for (int j = 1; j <= disp; ++j) v[liber[j]] = 0; int value = 1; if (tryCombination(v) >= i) value = 0; for (int j = 1; j <= disp; ++j) v[liber[j]] = value; int l = 1, r = disp; while (l < r) { int mid = (l + r) / 2; for (int j = mid + 1; j <= r; ++j) v[liber[j]] = value ^ 1; if (tryCombination(v) >= i) { r = mid; } else { for (int j = 1; j <= mid; ++j) v[liber[j]] = value ^ 1; for (int j = mid + 1; j <= r; ++j) v[liber[j]] = value; l = mid + 1; } } v[liber[r]] = value; v1[i] = value; p[liber[r]] = i; for (int i = r; i <= disp - 1; ++i) liber[i] = liber[i + 1]; disp--; } //reverse(p, p + N); answer(v1, p); } /*int main() { int n; scanf("%d", &n); exploreCave(n); return 0; }*/
#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...