Submission #503072

# Submission time Handle Problem Language Result Execution time Memory
503072 2022-01-07T06:21:32 Z Mazaalai Xoractive (IZhO19_xoractive) C++17
100 / 100
6 ms 344 KB
#include "interactive.h"
#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define ff first
#define ss second
#define LINE "------------------\n"
#define ALL(x) x.begin(),x.end()
#define print(x) for(auto&el:x)cout<<el<<' ';cout<<'\n';
using namespace std;
using VI = vector <int>;
const int N = 105;
vector <int> ans;
int a1, n, answered;
// get_pairwise_xor, ask
void assign(int pos, int val) {
	answered++;
	ans[pos]=val;
}
VI dif(VI&a, VI&b) {
	VI c;
	int i = 0, j = 0, x = a.size(), y = b.size();
	while(i < x) {
		if (j < y && a[i] == b[j]) {
			i++, j++;
			continue;
		}
		c.pb(a[i++]);
	}
	// cout << "a: ";print(a);
	// cout << "b: ";print(b);
	// cout << "c: ";print(c);
	return c;
}
VI getVals(VI ids) {
	VI ids1 = ids, ret;
	ids.pb(1);
	VI res = get_pairwise_xor(ids);
	VI res1 = get_pairwise_xor(ids1);
	// cout << "res:";print(res);
	// cout << "res1:";print(res1);
	VI vals = dif(res, res1);
	for (int i = 1; i < vals.size(); i+=2) ret.pb(vals[i]^a1);
	// cout << "ids:";print(ids);
	// cout << "ret:";print(ret);
	return ret;
}
VI Union(VI&a, VI&b) {
	set <int> vals(ALL(a));
	for (auto& el : b) vals.insert(el);
	return VI(ALL(vals));
}
VI intersect(VI a, VI b) {
	set <int> vals(ALL(a)), res;
	for (auto& el : b) 
		if (vals.count(el)) res.insert(el);
	return VI(ALL(res));
}
vector<int> guess(int _n) {
	n = _n;
	a1 = ask(1); 
	ans.resize(n);
	assign(0, a1); // 0
	VI ids[10], vals[10];
	for (int i = 2; i <= n; i++) 
	for (int j = 0; (1<<j) <= i; j++) 
		if (i&(1<<j)) ids[j].pb(i);
	// for (int i = 0; i < 10; i++) cout << ids[i].size() << '\n';
	for (int i = 0; !ids[i].empty(); i++) 
		vals[i] = getVals(ids[i]);
	
	VI allVals;
	for (int j = 0; j < 10; j++) sort(ALL(vals[j]));
	for (int i = 0; i < 10; i++)
		allVals = Union(allVals, vals[i]);

	// for (int j = 0; (1<<j) <= n; j++) {
		// cout << j << ": ";
		// print(vals[j]);
	// }
	for (int i = 2; i <= n; i++) {
		VI cur = allVals;
		// cout << LINE;
		// cout << "val: " << i << "\n";
		for (int j = 0; (1<<j) <= n; j++) {
			// cout << j << ": ";
			VI tmp;
			if (i&(1<<j)) {
				// cout << 1 << " ";
				tmp = vals[j];
			} else {
				// cout << 0 << " ";
				tmp = dif(allVals, vals[j]);
			}
			// print(tmp);
			cur = intersect(cur, tmp);
		}
		if (cur.size() != 1) { // error
			ans[0] = -1;
			return ans;
		}
		assign(i-1, cur[0]);
	}
	return ans;
}
























Compilation message

Xoractive.cpp: In function 'VI getVals(VI)':
Xoractive.cpp:43:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   43 |  for (int i = 1; i < vals.size(); i+=2) ret.pb(vals[i]^a1);
      |                  ~~^~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 200 KB Output is correct
2 Correct 0 ms 200 KB Output is correct
3 Correct 0 ms 200 KB Output is correct
4 Correct 0 ms 200 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 328 KB Output is correct
2 Correct 4 ms 264 KB Output is correct
3 Correct 4 ms 328 KB Output is correct
4 Correct 5 ms 328 KB Output is correct
5 Correct 4 ms 328 KB Output is correct
6 Correct 4 ms 328 KB Output is correct
7 Correct 4 ms 328 KB Output is correct
8 Correct 5 ms 344 KB Output is correct
9 Correct 4 ms 328 KB Output is correct
10 Correct 5 ms 328 KB Output is correct
11 Correct 6 ms 328 KB Output is correct
12 Correct 4 ms 328 KB Output is correct
13 Correct 4 ms 328 KB Output is correct
14 Correct 5 ms 328 KB Output is correct
15 Correct 4 ms 328 KB Output is correct
16 Correct 4 ms 328 KB Output is correct
17 Correct 4 ms 328 KB Output is correct
18 Correct 4 ms 328 KB Output is correct
19 Correct 4 ms 328 KB Output is correct
20 Correct 5 ms 328 KB Output is correct
21 Correct 4 ms 328 KB Output is correct
22 Correct 4 ms 340 KB Output is correct
23 Correct 4 ms 328 KB Output is correct
24 Correct 4 ms 328 KB Output is correct
25 Correct 4 ms 328 KB Output is correct
26 Correct 4 ms 340 KB Output is correct
27 Correct 4 ms 328 KB Output is correct
28 Correct 4 ms 328 KB Output is correct
29 Correct 4 ms 336 KB Output is correct
30 Correct 4 ms 328 KB Output is correct
31 Correct 4 ms 328 KB Output is correct
32 Correct 4 ms 332 KB Output is correct
33 Correct 5 ms 340 KB Output is correct
34 Correct 5 ms 344 KB Output is correct
35 Correct 4 ms 328 KB Output is correct
36 Correct 4 ms 328 KB Output is correct
37 Correct 4 ms 328 KB Output is correct
38 Correct 6 ms 328 KB Output is correct
39 Correct 4 ms 328 KB Output is correct
40 Correct 5 ms 328 KB Output is correct
41 Correct 4 ms 328 KB Output is correct
42 Correct 4 ms 340 KB Output is correct
43 Correct 4 ms 328 KB Output is correct
44 Correct 4 ms 336 KB Output is correct
45 Correct 4 ms 328 KB Output is correct
46 Correct 4 ms 328 KB Output is correct
47 Correct 4 ms 328 KB Output is correct
48 Correct 4 ms 328 KB Output is correct
49 Correct 4 ms 328 KB Output is correct
50 Correct 4 ms 328 KB Output is correct
51 Correct 4 ms 328 KB Output is correct
52 Correct 4 ms 328 KB Output is correct
53 Correct 4 ms 328 KB Output is correct
54 Correct 6 ms 332 KB Output is correct
55 Correct 4 ms 328 KB Output is correct
56 Correct 4 ms 328 KB Output is correct
57 Correct 5 ms 328 KB Output is correct
58 Correct 4 ms 328 KB Output is correct
59 Correct 4 ms 328 KB Output is correct
60 Correct 6 ms 328 KB Output is correct
61 Correct 4 ms 328 KB Output is correct
62 Correct 4 ms 328 KB Output is correct
63 Correct 4 ms 328 KB Output is correct
64 Correct 4 ms 336 KB Output is correct
65 Correct 4 ms 328 KB Output is correct
66 Correct 4 ms 340 KB Output is correct
67 Correct 4 ms 328 KB Output is correct
68 Correct 4 ms 328 KB Output is correct
69 Correct 4 ms 276 KB Output is correct
70 Correct 4 ms 328 KB Output is correct
71 Correct 4 ms 328 KB Output is correct
72 Correct 4 ms 328 KB Output is correct
73 Correct 5 ms 328 KB Output is correct
74 Correct 5 ms 328 KB Output is correct
75 Correct 4 ms 344 KB Output is correct
76 Correct 5 ms 328 KB Output is correct
77 Correct 4 ms 328 KB Output is correct
78 Correct 5 ms 328 KB Output is correct
79 Correct 4 ms 328 KB Output is correct
80 Correct 4 ms 328 KB Output is correct
81 Correct 4 ms 328 KB Output is correct
82 Correct 4 ms 328 KB Output is correct
83 Correct 3 ms 328 KB Output is correct
84 Correct 5 ms 340 KB Output is correct
85 Correct 4 ms 328 KB Output is correct
86 Correct 4 ms 328 KB Output is correct
87 Correct 4 ms 336 KB Output is correct
88 Correct 4 ms 328 KB Output is correct
89 Correct 4 ms 328 KB Output is correct
90 Correct 4 ms 336 KB Output is correct
91 Correct 4 ms 328 KB Output is correct
92 Correct 4 ms 328 KB Output is correct
93 Correct 4 ms 328 KB Output is correct
94 Correct 4 ms 328 KB Output is correct
95 Correct 4 ms 328 KB Output is correct
96 Correct 4 ms 328 KB Output is correct
97 Correct 5 ms 328 KB Output is correct
98 Correct 4 ms 328 KB Output is correct
99 Correct 4 ms 328 KB Output is correct
100 Correct 4 ms 328 KB Output is correct