제출 #1324064

#제출 시각아이디문제언어결과실행 시간메모리
1324064adiyerXoractive (IZhO19_xoractive)C++20
0 / 100
1 ms332 KiB
#include <bits/stdc++.h>
#include "interactive.h"

using namespace std;

int arr[100], was[100];

int get(int x){
    if(was[x]) return arr[x];
    was[x] = 1; return arr[x] = ask(x + 1);
}

vector < int > solve(int l, int r, int n){
	if(l == r) return {get(l)};
	if(l + 1 == r) return {get(l), get(r)};

	int m = (l + r) / 2;

	multiset < int > s;
	vector < int > v, L, R, tot, val, val2;

	for(int i = l; i <= m; i++) v.push_back(i + 1);
    
	L = get_pairwise_xor(v); 
	v.push_back(n);
	tot = get_pairwise_xor(v);

	for(int i : tot) s.insert(i);
	for(int i : L) s.erase(s.find(i));
	s.erase(s.find(0));

	while(!s.empty()){
		int _xor = *s.begin();
		s.erase(s.begin());
		s.erase(s.begin());
		val.push_back((_xor ^ arr[n - 1]));
	}

    val2 = solve(m + 1, r, n);

    for(int x : val2) val.push_back(x);

	return val;
}

vector < int > guess(int n){
    for(int i = 0; i < 100; i++) was[i] = arr[i] = 0;
	arr[n - 1] = get(n - 1);
	return solve(0, n - 1, n);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...