Submission #261635

#TimeUsernameProblemLanguageResultExecution timeMemory
261635sandovalCave (IOI13_cave)C++11
21 / 100
392 ms648 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(int l, int r) {return uniform_int_distribution<>(l,r)(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; while (!v.empty()) { int idx = rnd(0, (int)v.size()-1); int x = v[idx]; sol[x] ^= 1; int r = ask(sol); if (r == -1) return; sol[x] ^= 1; if (r > ans) { sol[x] ^= 1; ans = r; v.erase(v.begin()+idx); } else if (r == ans) { continue; } else if (r < ans) { v.erase(v.begin()+idx); } } } void exploreCave(int N) { vector<int> p(N), v; for (auto& x : p) x = rnd(0,1); for (int i = 0; i < N; ++i) v.push_back(i); shuffle(v.begin(), v.end(), rng); 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...