Submission #548190

#TimeUsernameProblemLanguageResultExecution timeMemory
548190Sergio_2357Cave (IOI13_cave)C++17
100 / 100
1772 ms468 KiB
#include "cave.h" #include <bits/stdc++.h> using namespace std; typedef vector<int> vi; int find_pos(int d, vi& pos, vi& corr) { int n = corr.size(); int t[n]; for (int i = 0; i < n; i++) t[i] = 0; for (int i = 0; i < d; i++) t[pos[i]] = corr[i]; return (tryCombination(t) == d) ? 1 : 0; } bool test_range(int b, int e, int d, vi& used, vi& pos, vi& corr) { int n = corr.size(); int t[n]; for (int i = 0; i < n; i++) t[i] = 1 - corr[d]; for (int i = 0; i < d; i++) t[pos[i]] = corr[i]; int c = 0; for (int i = 0; i < n; i++) { //cout << i << ' ' << c << endl; if (used[i]) continue; if (c >= b && c < e) t[i] = corr[d]; c++; } return tryCombination(t) != d; } void exploreCave(int n) { vi pos(n, -1); vi corr(n, -1); vi used(n, 0); for (int d = 0; d < n; d++) { corr[d] = find_pos(d, pos, corr); //cout << d << ' ' << corr[d] << endl; int l = 0; int h = n - d; while (l < h - 1) { int m = (h - l) / 2 + l; if (test_range(l, m, d, used, pos, corr)) h = m; else l = m; } int c = 0; for (int i = 0; i < n; i++) { if (used[i]) continue; if (c == l) { pos[d] = i; used[i] = 1; } c++; } } int S[n]; int D[n]; for (int i = 0; i < n; i++) { //cout << corr[i] << ' ' << pos[i] << endl; S[pos[i]] = corr[i]; } for (int i = 0; i < n; i++) D[pos[i]] = i; 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...