제출 #261623

#제출 시각아이디문제언어결과실행 시간메모리
261623sandoval동굴 (IOI13_cave)C++11
21 / 100
367 ms1144 KiB
#include "cave.h" #include <bits/stdc++.h> using namespace std; using ll = long long; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); inline int rnd() {return uniform_int_distribution<>(0,1)(rng);} constexpr int MAXN = 5002; int a[MAXN], comb[MAXN], ass[MAXN]; /*int printq(const vector<int>& x) { cout << "?"; for (auto q : x) cout << ' ' << q; cout << endl; int p; cin >> p; return p; }*/ int ask(const vector<int>& p) { for (int i = 0; i < (int)p.size(); ++i) a[i] = p[i]; //return printq(p); return tryCombination(a); } void solve(vector<int> v, vector<int>& sol) { if (v.empty()) return; int ans = ask(sol); if (ans == -1) return; vector<int> ri; int w = -1; for (auto x : v) { sol[x] ^= 1; int r = ask(sol); if (r == -1) return; if (r > ans) { // ultima puerta abierta. w = x; } else if (r == ans) { // puerta a la derecha. ri.push_back(x); } sol[x] ^= 1; } assert(w != -1); sol[w] ^= 1; solve(ri, sol); } void exploreCave(int N) { vector<int> p(N), v; for (auto& x : p) x = rnd(); for (int i = 0; i < N; ++i) v.push_back(i); solve(v, p); assert(ask(p) == -1); for (int i = 0; i < N; ++i) comb[i] = p[i]; for (int i = 0; i < N; ++i) { p[i] ^= 1; ass[i] = ask(p); p[i] ^= 1; } answer(comb, ass); /*for (int i = 0; i < N; ++i) cout << comb[i] << ' '; cout << endl; for (int i = 0; i < N; ++i) cout << ass[i] << ' '; cout << endl;*/ }
#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...