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 <bits/stdc++.h>
using namespace std;
template<class T, class U>
void ckmin(T &a, U b)
{
if (a > b) a = b;
}
template<class T, class U>
void ckmax(T &a, U b)
{
if (a < b) a = b;
}
#define MP make_pair
#define PB push_back
#define LB lower_bound
#define UB upper_bound
#define fi first
#define se second
#define FOR(i, a, b) for (auto i = (a); i < (b); i++)
#define FORD(i, a, b) for (auto i = (a) - 1; i >= (b); i--)
#define SZ(x) ((int) ((x).size()))
#define ALL(x) (x).begin(), (x).end()
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<pii> vpi;
typedef vector<pll> vpl;
int N;
vi ans;
set<int> stor[8];
set<int> cand;
int qry(int x)
{
return ask(x + 1);
}
map<int, int> qry1(vi v)
{
for (int &x : v) x++;
// for (int x : v)
// {
// cerr << "MOO " << x << endl;
// }
map<int, int> mp;
if (v.empty()) return mp;
vi res = get_pairwise_xor(v);
for (int x : res)
{
mp[x]++;
}
mp[0] -= SZ(v);
for (auto it = mp.begin(); it != mp.end(); it++)
{
(it -> se) /= 2;
}
return mp;
}
vi guess(int n)
{
N = n;
ans.resize(N);
ans[0] = qry(0);
//which guys have this bit as 1?
// cerr << "OK\n";
FOR(i, 0, 7)
{
vi guys;
FOR(j, 1, N)
{
if (j & (1 << i))
{
guys.PB(j);
}
}
auto wo = qry1(guys);
guys.PB(0);
auto wi = qry1(guys);
for (auto p : wo)
{
wi[p.fi] -= p.se;
}
for (auto p : wi)
{
if (p.se > 0)
{
stor[i].insert(p.fi ^ ans[0]);
}
}
for (int x : stor[i])
{
cand.insert(x);
}
}
// cerr << "HEY\n";
// for (int x : cand)
// {
// cerr << "CAND " << x << endl;
// }
FOR(i, 1, N)
{
set<int> cur = cand;
FOR(j, 0, 7)
{
for (auto it = cur.begin(); it != cur.end(); )
{
bool hasbit = (i & (1 << j));
bool hasnum = (stor[j].find(*it) != stor[j].end());
if (hasbit ^ hasnum)
{
it = cur.erase(it);
}
else
{
it++;
}
}
}
ans[i] = *cur.begin();
}
//S vs aS
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |