제출 #1205999

#제출 시각아이디문제언어결과실행 시간메모리
1205999dostsXoractive (IZhO19_xoractive)C++20
88 / 100
5 ms784 KiB
#include "interactive.h"
#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2")
//#define int long long
#define pii pair<int,int>
#define vi vector<int>
#define ff first
#define ss second
#define sp << " " <<
#define all(x) x.begin(),x.end()
#define big(x) ((int)(x.size()))
using namespace std;
const int MOD = 1e9+7, LIM = 1e6+1, inf = 2e9;
using namespace std;

int x;
vi difference(vi v1,vi v2) {
	multiset<int> ms;
	for (auto it : v2) ms.insert(it);
	for (auto it : v1) ms.erase(ms.find(it));
	return vi(all(ms));
}

vi isect(vi v1,vi v2) {
	multiset<int> ms;
	for (auto it : v1) ms.insert(it);
	vi ret;
	for (auto it : v2) {
		if (ms.find(it) != ms.end()) ret.push_back(it),ms.erase(ms.find(it));
	}
	return ret;
}

vi figureout(vi v1,vi v2) {
	vi nw = difference(v1,v2);
	for (auto& it : nw) it^=x;
	return nw;
}

vi getxors(vi v) {
	if (v.empty()) return {};
	vi vv = get_pairwise_xor(v);
	reverse(all(vv));
	while (!vv.empty() && vv.back() == 0) vv.pop_back();
	reverse(all(vv));
	vi vvv;
	for (int i = 0;i<vv.size();i+=2) vvv.push_back(vv[i]);
	return vvv;
}

vector<int> guess(int n) {
	vi ans(n);
	x = ans[0] = ask(1);
	vi elems[7][2];
	vi init;
	for (int i=2;i<=n;i++) init.push_back(i);
	vi vv1 = getxors(init);
	init.push_back(1);
	vi vv2 = getxors(init);
	vi todos = figureout(vv1,vv2);

	for (int i = 0;i<7;i++) {
		vi toask;
		for (int j=1;j<n;j++) {
			if ((j-1)&(1<<i)) toask.push_back(j+1);
		}
		vi v1 = getxors(toask);
		toask.push_back(1);
		vi v2 = getxors(toask);
		vi here = figureout(v1,v2);
		elems[i][1] = here;
		elems[i][0] = difference(here,todos);
	}
	for (int i=1;i<n;i++) {
		vi cur = todos;
		for (int j = 0;j<7;j++) {
			if ((i-1)&(1<<j)) cur = isect(cur,elems[j][1]);
			else cur = isect(cur,elems[j][0]);
		}
		ans[i] = cur.back();
	}
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...