Submission #261669

#TimeUsernameProblemLanguageResultExecution timeMemory
261669sandovalCave (IOI13_cave)C++11
34 / 100
81 ms33036 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 q = 0; int printq(const vector<int>& x) { /*cout << "?"; for (auto q : x) cout << ' ' << q; cout << endl; int p; cin >> p; return p;*/ ++q; for (int i = 0; i < (int)x.size(); ++i) if (x[i] == 0) return i; return -1; } int ask(const vector<int>& p) { for (int i = 0; i < (int)p.size(); ++i) a[i] = p[i]; return tryCombination(a); //return printq(p); } void solve(vector<int>& v, vector<int>& sol) { if (v.empty()) return; int ans = ask(sol); if (ans == -1) return; 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) { sol[x] ^= rnd(0,1); } else { ri.erase(find(ri.begin(), ri.end(), x)); ass[x] = r; } } } void exploreCave(int N) { vector<int> p(N,0), v; 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; cout << q << 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...