Submission #471450

#TimeUsernameProblemLanguageResultExecution timeMemory
471450dung11112003Cave (IOI13_cave)C++11
100 / 100
1097 ms464 KiB
#include "cave.h" #include <bits/stdc++.h> #define taskname "" #define pb push_back #define eb emplace_back #define fi first #define se second #define all(x) (x).begin(), (x).end() #define rall(x) (x).rbegin(), (x).rend() #define for0(i, n) for (int i = 0; i < (int)(n); ++i) #define for1(i, n) for (int i = 1; i <= (int)(n); ++i) #define ford(i, n) for (int i = (int)(n) - 1; i >= 0; --i) #define fore(i, a, b) for (int i = (int)(a); i <= (int)(b); ++i) using namespace std; typedef long long ll; typedef long double ld; typedef complex <ld> cd; typedef vector <cd> vcd; typedef vector <int> vi; template<class T> using v2d = vector <vector <T> >; template<class T> bool uin(T &a, T b) { return a > b ? (a = b, true) : false; } template<class T> bool uax(T &a, T b) { return a < b ? (a = b, true) : false; } mt19937 rng(chrono::system_clock::now().time_since_epoch().count()); void exploreCave(int n) { vi match(n, -1), combination(n, -1); auto ask = [&](vi S) { int ret = tryCombination(S.data()); if (ret == -1) { ret = n; } return ret; }; for0(i, n) { int state = 0; vi cur = combination; for0(i, n) { if (combination[i] == -1) { cur[i] = state; } } if (ask(cur) <= i) { state = 1; } int lo = 0, hi = n - 1; while (lo != hi) { int mid = (lo + hi) / 2; for0(i, n) { if (combination[i] == -1) { cur[i] = state ^ (i > mid); } } if (ask(cur) > i) { hi = mid; } else { lo = mid + 1; } } combination[lo] = state; match[lo] = i; } answer(combination.data(), match.data()); }
#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...