Submission #155839

# Submission time Handle Problem Language Result Execution time Memory
155839 2019-09-30T23:15:19 Z qkxwsm Xoractive (IZhO19_xoractive) C++14
100 / 100
20 ms 552 KB
#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
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 504 KB Output is correct
3 Correct 2 ms 252 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 8 ms 376 KB Output is correct
2 Correct 8 ms 504 KB Output is correct
3 Correct 6 ms 348 KB Output is correct
4 Correct 8 ms 448 KB Output is correct
5 Correct 8 ms 504 KB Output is correct
6 Correct 8 ms 504 KB Output is correct
7 Correct 6 ms 376 KB Output is correct
8 Correct 8 ms 504 KB Output is correct
9 Correct 8 ms 448 KB Output is correct
10 Correct 8 ms 376 KB Output is correct
11 Correct 6 ms 248 KB Output is correct
12 Correct 8 ms 448 KB Output is correct
13 Correct 8 ms 376 KB Output is correct
14 Correct 8 ms 376 KB Output is correct
15 Correct 6 ms 248 KB Output is correct
16 Correct 8 ms 376 KB Output is correct
17 Correct 8 ms 376 KB Output is correct
18 Correct 8 ms 504 KB Output is correct
19 Correct 6 ms 376 KB Output is correct
20 Correct 8 ms 376 KB Output is correct
21 Correct 8 ms 376 KB Output is correct
22 Correct 8 ms 508 KB Output is correct
23 Correct 6 ms 248 KB Output is correct
24 Correct 8 ms 504 KB Output is correct
25 Correct 8 ms 376 KB Output is correct
26 Correct 8 ms 376 KB Output is correct
27 Correct 6 ms 376 KB Output is correct
28 Correct 8 ms 376 KB Output is correct
29 Correct 8 ms 504 KB Output is correct
30 Correct 8 ms 504 KB Output is correct
31 Correct 6 ms 380 KB Output is correct
32 Correct 8 ms 376 KB Output is correct
33 Correct 8 ms 376 KB Output is correct
34 Correct 8 ms 504 KB Output is correct
35 Correct 6 ms 380 KB Output is correct
36 Correct 8 ms 504 KB Output is correct
37 Correct 8 ms 376 KB Output is correct
38 Correct 8 ms 504 KB Output is correct
39 Correct 6 ms 376 KB Output is correct
40 Correct 8 ms 376 KB Output is correct
41 Correct 8 ms 504 KB Output is correct
42 Correct 8 ms 504 KB Output is correct
43 Correct 6 ms 248 KB Output is correct
44 Correct 8 ms 504 KB Output is correct
45 Correct 8 ms 504 KB Output is correct
46 Correct 8 ms 424 KB Output is correct
47 Correct 6 ms 248 KB Output is correct
48 Correct 8 ms 508 KB Output is correct
49 Correct 8 ms 552 KB Output is correct
50 Correct 8 ms 376 KB Output is correct
51 Correct 6 ms 376 KB Output is correct
52 Correct 8 ms 376 KB Output is correct
53 Correct 20 ms 376 KB Output is correct
54 Correct 8 ms 376 KB Output is correct
55 Correct 6 ms 248 KB Output is correct
56 Correct 8 ms 444 KB Output is correct
57 Correct 8 ms 376 KB Output is correct
58 Correct 8 ms 444 KB Output is correct
59 Correct 6 ms 376 KB Output is correct
60 Correct 8 ms 376 KB Output is correct
61 Correct 8 ms 376 KB Output is correct
62 Correct 8 ms 504 KB Output is correct
63 Correct 6 ms 376 KB Output is correct
64 Correct 8 ms 376 KB Output is correct
65 Correct 8 ms 376 KB Output is correct
66 Correct 8 ms 376 KB Output is correct
67 Correct 6 ms 376 KB Output is correct
68 Correct 8 ms 376 KB Output is correct
69 Correct 8 ms 380 KB Output is correct
70 Correct 8 ms 504 KB Output is correct
71 Correct 6 ms 360 KB Output is correct
72 Correct 8 ms 376 KB Output is correct
73 Correct 8 ms 504 KB Output is correct
74 Correct 8 ms 504 KB Output is correct
75 Correct 6 ms 248 KB Output is correct
76 Correct 8 ms 376 KB Output is correct
77 Correct 8 ms 504 KB Output is correct
78 Correct 8 ms 504 KB Output is correct
79 Correct 5 ms 248 KB Output is correct
80 Correct 8 ms 504 KB Output is correct
81 Correct 8 ms 376 KB Output is correct
82 Correct 8 ms 420 KB Output is correct
83 Correct 5 ms 248 KB Output is correct
84 Correct 8 ms 508 KB Output is correct
85 Correct 8 ms 504 KB Output is correct
86 Correct 8 ms 504 KB Output is correct
87 Correct 6 ms 296 KB Output is correct
88 Correct 8 ms 504 KB Output is correct
89 Correct 8 ms 376 KB Output is correct
90 Correct 8 ms 508 KB Output is correct
91 Correct 6 ms 248 KB Output is correct
92 Correct 8 ms 376 KB Output is correct
93 Correct 8 ms 376 KB Output is correct
94 Correct 8 ms 376 KB Output is correct
95 Correct 6 ms 248 KB Output is correct
96 Correct 8 ms 504 KB Output is correct
97 Correct 8 ms 504 KB Output is correct
98 Correct 8 ms 376 KB Output is correct
99 Correct 6 ms 248 KB Output is correct
100 Correct 8 ms 376 KB Output is correct