제출 #227751

#제출 시각아이디문제언어결과실행 시간메모리
227751emil_physmathXoractive (IZhO19_xoractive)C++17
100 / 100
8 ms560 KiB
#include <algorithm> #include "interactive.h" #include <vector> #include <map> #include <set> #include <iostream> using namespace std; using llong = long long; set<int> atbit[100]; vector<int> guess(int n) { vector<int> res(n + 1); res[1] = ask(1); set<int> anses; for (int bit = 0; (1 << bit) <= n; ++bit) { vector<int> ind; for (int i = 2; i <= n; ++i) if (i & (1 << bit)) ind.push_back(i); if (ind.empty()) continue; vector<int> b = get_pairwise_xor(ind); sort(b.begin(), b.end()); ind.push_back(1); vector<int> a = get_pairwise_xor(ind); sort(a.begin(), a.end()); vector<int> x; set_difference(a.begin(), a.end(), b.begin(), b.end(), back_inserter(x)); for (int& y: x) y ^= res[1]; atbit[bit].insert(x.begin(), x.end()); atbit[bit].erase(res[1]); anses.insert(x.begin(), x.end()); } anses.erase(res[1]); for (int i = 2; i <= n; ++i) for (int ans: anses) { bool f = true; for (int bit = 0; (1 << bit) <= n; ++bit) { bool g = (i & (1 << bit)); if (atbit[bit].count(ans) != g) { f = false; break; } } if (f) { res[i] = ans; break; } } res.erase(res.begin()); return res; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...