Submission #261658

#TimeUsernameProblemLanguageResultExecution timeMemory
261658sandovalCave (IOI13_cave)C++11
21 / 100
321 ms65540 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; } map<vector<int>, int> m; int ask(const vector<int>& p) { if (m.find(p) != m.end()) return m[p]; for (int i = 0; i < (int)p.size(); ++i) a[i] = p[i]; return m[p] = tryCombination(a); //return m[p] = printq(p); } void solve(vector<int> v, vector<int>& sol) { if (v.empty()) return; int ans = ask(sol); if (ans == -1) return; shuffle(v.begin(), v.end(), rng); vector<int> ri = v; for (auto x : v) { sol[x] ^= 1; int r = ask(sol); if (r == -1) return; sol[x] ^= 1; if (r > ans) { ass[x] = ans; sol[x] ^= 1; ri.erase(find(ri.begin(), ri.end(), x)); solve(ri, sol); return; } else if (r == ans) { } else { ri.erase(find(ri.begin(), ri.end(), x)); ass[x] = r; } } } 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), ass[i] = -1; 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) { if (ass[i] == -1) { p[i] ^= 1; ass[i] = ask(p); p[i] ^= 1; } } answer(comb, ass); return; 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...