Submission #384375

# Submission time Handle Problem Language Result Execution time Memory
384375 2021-04-01T14:13:08 Z patrikpavic2 Xoractive (IZhO19_xoractive) C++17
6 / 100
4 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 = 6;

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);
	for(int i = 0;i < BIT;i++){
		vi Q;
		for(int j = 2;j <= n;j++){
			if(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 = svi;
		for(int j = 0;j < BIT;j++){
		//	printf("pozivam presjek\n"); 
			cur = presjek(cur, B[!!(i & (1 << j))][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);
		//printf("A[ %d ] = %d\n", i, ja); 
		for(int j = 0;j < BIT;j++){
			B[!!(i & (1 << j))][j] = razlika(B[!!(i & (1 << j))][j], pos);
		}
	}
	return ans;
}
# Verdict Execution time Memory 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 512 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 4 ms 492 KB Output is not correct
2 Halted 0 ms 0 KB -