답안 #384392

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
384392 2021-04-01T14:35:01 Z patrikpavic2 Xoractive (IZhO19_xoractive) C++17
100 / 100
5 ms 512 KB
#include "interactive.h"
#include <vector>
#include <cstdio>
#include <algorithm>

#define PB push_back

using namespace std;

typedef vector < int > vi;

vi razlika(vi &A, vi &B){
	int i = 0, j = 0;
	vi ret;
	for(;i < (int)A.size() || j < (int)B.size();){
		if(i == (int)A.size() || (j < (int)B.size() && B[j] < A[i])) 
			ret.PB(B[j++]);
		else if(j == (int)B.size() || (i < (int)A.size() && B[j] > A[i])) 
			ret.PB(A[i++]);
		else
			i++, j++;
	}
	return ret;
}

vi presjek(vi &A, vi &B){
	int i = 0, j = 0;
	vi ret;
	for(;i < (int)A.size() && j < (int)B.size();){
		if(B[j] < A[i]) 
			j++;
		else if(B[j] > A[i]) 
			i++;
		else
			ret.PB(A[i++]), j++;
	}
	return ret;
}

int jen;

vi saznaj(vi pos){
	if((int)pos.size() == 0) return {};
	vi A, B, C, ret;
	A = get_pairwise_xor(pos);
	pos.PB(1);
	B = get_pairwise_xor(pos);
	C = razlika(A, B); 
	for(int i = 1;i < (int)C.size();i += 2)
		ret.PB(C[i] ^ jen);
	sort(ret.begin(), ret.end());
	return ret;
}

vi B[2][10], svi;

const int BIT = 7;
const double KOF = 1.618;
const int N = 105;

int msk[N];

void generate(int l, int r, int raz){
	if(raz == BIT) return;
	if(r <= l) return;
	int mid = (int)((double)(l + r) / KOF);
	mid = min(max(mid, l), r - 1);
	for(int i = l;i <= mid;i++) {
	//	printf("%d u %d\n", i, raz);
		msk[i] += (1 << raz);
	}
	generate(l, mid, raz + 1);
	generate(mid + 1, r, raz + 1);
}

vi guess(int n) {
//	printf("TU SAM\n");
	vi ans; jen = ask(1);
	for(int i = 2;i <= n;i++)
		svi.PB(i);
	//svi = saznaj(svi);
	//generate(2, n, 0);
	for(int i = 2;i <= n;i++)
		msk[i] = 127 - i;
	for(int i = 0;i < BIT;i++){
		vi Q;
		for(int j = 2;j <= n;j++){
			if(msk[j] & (1 << i))
				Q.PB(j);
		}
		B[1][i] = saznaj(Q);
		//B[0][i] = razlika(svi, B[1][i]);
	}	
//	printf("TU SAM n = %d\n", n);
	ans.PB(jen); 
	for(int i = 2;i <= n;i++){
		vi cur;
		for(int j = 0;j < BIT;j++){
		//	printf("pozivam presjek\n"); 
			if(msk[i] & (1 << j)){
				if((int)cur.size() == 0)
					cur = B[1][j];
				else
					cur = presjek(cur, B[1][j]);
			}
		//	printf("gotov presjek\n");
		}
		//printf("i = %d cur = %d\n", i, (int)cur.size());
		int ja = cur[0];
		ans.PB(ja);
		vi pos; pos.PB(ja);
		svi = razlika(svi, pos);
		//printf("A[ %d ] = %d\n", i, ja); 
		for(int j = 0;j < BIT;j++){
			if(msk[i] & (1 << j))
				B[1][j] = razlika(B[1][j], pos);
		}
	}
	return ans;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 256 KB Output is correct
2 Correct 1 ms 256 KB Output is correct
3 Correct 1 ms 256 KB Output is correct
4 Correct 1 ms 256 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 364 KB Output is correct
2 Correct 4 ms 364 KB Output is correct
3 Correct 3 ms 364 KB Output is correct
4 Correct 4 ms 364 KB Output is correct
5 Correct 4 ms 364 KB Output is correct
6 Correct 4 ms 364 KB Output is correct
7 Correct 4 ms 364 KB Output is correct
8 Correct 4 ms 364 KB Output is correct
9 Correct 4 ms 364 KB Output is correct
10 Correct 4 ms 364 KB Output is correct
11 Correct 3 ms 364 KB Output is correct
12 Correct 3 ms 364 KB Output is correct
13 Correct 4 ms 364 KB Output is correct
14 Correct 4 ms 364 KB Output is correct
15 Correct 3 ms 364 KB Output is correct
16 Correct 4 ms 364 KB Output is correct
17 Correct 4 ms 364 KB Output is correct
18 Correct 4 ms 364 KB Output is correct
19 Correct 4 ms 364 KB Output is correct
20 Correct 4 ms 364 KB Output is correct
21 Correct 4 ms 492 KB Output is correct
22 Correct 4 ms 364 KB Output is correct
23 Correct 3 ms 364 KB Output is correct
24 Correct 4 ms 364 KB Output is correct
25 Correct 4 ms 364 KB Output is correct
26 Correct 4 ms 364 KB Output is correct
27 Correct 3 ms 364 KB Output is correct
28 Correct 4 ms 364 KB Output is correct
29 Correct 4 ms 364 KB Output is correct
30 Correct 4 ms 364 KB Output is correct
31 Correct 3 ms 364 KB Output is correct
32 Correct 4 ms 364 KB Output is correct
33 Correct 4 ms 384 KB Output is correct
34 Correct 4 ms 364 KB Output is correct
35 Correct 3 ms 384 KB Output is correct
36 Correct 4 ms 364 KB Output is correct
37 Correct 4 ms 364 KB Output is correct
38 Correct 4 ms 364 KB Output is correct
39 Correct 3 ms 364 KB Output is correct
40 Correct 4 ms 364 KB Output is correct
41 Correct 4 ms 364 KB Output is correct
42 Correct 4 ms 384 KB Output is correct
43 Correct 3 ms 364 KB Output is correct
44 Correct 4 ms 364 KB Output is correct
45 Correct 4 ms 364 KB Output is correct
46 Correct 4 ms 364 KB Output is correct
47 Correct 3 ms 364 KB Output is correct
48 Correct 4 ms 364 KB Output is correct
49 Correct 4 ms 364 KB Output is correct
50 Correct 4 ms 364 KB Output is correct
51 Correct 3 ms 364 KB Output is correct
52 Correct 4 ms 364 KB Output is correct
53 Correct 4 ms 364 KB Output is correct
54 Correct 4 ms 364 KB Output is correct
55 Correct 3 ms 364 KB Output is correct
56 Correct 4 ms 364 KB Output is correct
57 Correct 4 ms 364 KB Output is correct
58 Correct 4 ms 364 KB Output is correct
59 Correct 3 ms 364 KB Output is correct
60 Correct 4 ms 364 KB Output is correct
61 Correct 4 ms 364 KB Output is correct
62 Correct 4 ms 364 KB Output is correct
63 Correct 3 ms 364 KB Output is correct
64 Correct 4 ms 364 KB Output is correct
65 Correct 4 ms 364 KB Output is correct
66 Correct 4 ms 364 KB Output is correct
67 Correct 3 ms 364 KB Output is correct
68 Correct 5 ms 364 KB Output is correct
69 Correct 4 ms 364 KB Output is correct
70 Correct 4 ms 364 KB Output is correct
71 Correct 3 ms 364 KB Output is correct
72 Correct 4 ms 384 KB Output is correct
73 Correct 4 ms 364 KB Output is correct
74 Correct 4 ms 364 KB Output is correct
75 Correct 3 ms 364 KB Output is correct
76 Correct 4 ms 364 KB Output is correct
77 Correct 5 ms 364 KB Output is correct
78 Correct 4 ms 364 KB Output is correct
79 Correct 3 ms 364 KB Output is correct
80 Correct 4 ms 364 KB Output is correct
81 Correct 4 ms 364 KB Output is correct
82 Correct 5 ms 364 KB Output is correct
83 Correct 3 ms 364 KB Output is correct
84 Correct 4 ms 364 KB Output is correct
85 Correct 4 ms 364 KB Output is correct
86 Correct 4 ms 364 KB Output is correct
87 Correct 3 ms 364 KB Output is correct
88 Correct 4 ms 364 KB Output is correct
89 Correct 4 ms 364 KB Output is correct
90 Correct 4 ms 364 KB Output is correct
91 Correct 3 ms 512 KB Output is correct
92 Correct 4 ms 364 KB Output is correct
93 Correct 4 ms 364 KB Output is correct
94 Correct 4 ms 364 KB Output is correct
95 Correct 3 ms 364 KB Output is correct
96 Correct 4 ms 364 KB Output is correct
97 Correct 4 ms 364 KB Output is correct
98 Correct 4 ms 364 KB Output is correct
99 Correct 3 ms 364 KB Output is correct
100 Correct 5 ms 364 KB Output is correct