Submission #1173936

#TimeUsernameProblemLanguageResultExecution timeMemory
1173936ByeWorldXoractive (IZhO19_xoractive)C++20
100 / 100
3 ms500 KiB
#include "interactive.h"
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define fi first
#define se second
#define lf (id<<1)
#define rg ((id<<1)|1)
#define md ((l+r)>>1)
#define ld long double
using namespace std;
typedef pair<int,int> pii;
typedef pair<char,char> pcc;
typedef pair<pii,int> ipii;
typedef pair<pii,pii> ipiii;
const int MAXN = 2e5+10;
const int SQRT = 300;
const int MAXA = 50;
const int LOG = 20;
const ld EPS = 1e-12;
const int MOD = 1e9+7;
int sum(int a, int b){ return (a+b)%MOD; }
void chsum(int &a, int b){ a = (a+b)%MOD; }
void chmn(int &a, int b){ a = min(a, b); }
void chmx(int &a, int b){ a = max(a, b); }

map<int,int> idx;

vector<int> guess(int n) {
	vector<int>ans(n);
	ans[0] = ask(1);
	for(int i=0; (1ll<<i)<=n; i++){
		vector<int> vec;
		for(int j=2; j<=n; j++)
			if((j>>i) & 1) vec.pb(j);
		vector<int> v1 = get_pairwise_xor(vec);
		vec.pb(1);
		vector<int> v2 = get_pairwise_xor(vec);

		map<int,int>m;
		for(auto in : v1) m[in]--;
		for(auto in : v2) m[in]++;
			// cout << (1<<i) << " i\n";
		for(auto [x,y] : m){
			if(y==0 || x==0) continue;
			idx[x ^ ans[0]] |= (1ll<<i);
			// cout << (x^ans[0]) << " pp\n";
		}
	}
	for(auto [x,y] : idx)
		ans[y-1] = x;
	for(int i=0; i<ans.size(); i++)
		for(int j=i+1; j<ans.size(); j++)
			assert(ans[i] != ans[j]);
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...