# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
645835 | boris_mihov | Xoractive (IZhO19_xoractive) | C++17 | 4 ms | 388 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "interactive.h"
#include <algorithm>
#include <iostream>
#include <numeric>
#include <vector>
#include <map>
#include <set>
typedef long long llong;
const int MAXN = 250 + 10;
const int INF = 1e9;
std::map <int,int> map;
std::vector <int> ans, res, res2, queried;
std::multiset <int> s;
std::vector <int> query(std::vector <int> returned, int sz)
{
std::vector <int> curr;
for (int i = sz ; i < returned.size() ; i += 2)
{
curr.push_back(returned[i]);
}
return curr;
}
std::vector <int> guess(int n)
{
ans.resize(n);
ans[n-1] = ask(n);
for (int log = 0 ; (1 << log) <= n-1 ; ++log)
{
s.clear();
queried.clear();
for (int i = 1 ; i <= n-1 ; ++i)
{
if ((i & (1 << log)))
{
queried.push_back(i);
}
}
queried.push_back(n);
if (queried.size() == 1) continue;
res = query(get_pairwise_xor(queried), queried.size());
if (queried.size() == 2)
{
map[res[0] ^ ans[n-1]] |= (1 << log);
continue;
}
queried.pop_back();
res2 = query(get_pairwise_xor(queried), queried.size());
for (const int &i : res) s.insert(i);
for (const int &i : res2) s.erase(s.find(i));
for (const int &i : s)
{
map[i ^ ans[n-1]] |= (1 << log);
}
}
for (auto [key, value] : map)
{
ans[value - 1] = key;
}
return ans;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |