#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |