#include "interactive.h"
#include <bits/stdc++.h>
using namespace std;
unordered_multiset<int> s;
unordered_set<int> s1[8];
long long solve(int a)
{
int x;
for(int i=0;i<7;i++)
{
if(!(a&(1LL<<i)))
{
x=i;
break;
}
}
//cout<<" "<<a<<" "<<x<<endl;
for(auto i:s1[x])
{
int br=0;
for(int j=0;j<7;j++)
{
if(a&(1LL<<j))
{
if(s1[j].find(i)==s1[j].end())br++;
}
else
{
if(s1[j].find(i)!=s1[j].end())br++;
}
}
if(br==7)return i;
}
return -1;
}
vector<int> guess(int n)
{
int x=ask(n);
vector<int> v;
vector<int> ans;
for(int i=0;i<7;i++)
{
v.clear();
s.clear();
for(int j=0;j<n-1;j++)
{
if(!(j&(1LL<<i)))
{
v.push_back(j+1);
}
}
if(v.size()==0)continue;
ans=get_pairwise_xor(v);
for(auto h:ans)s.insert(h);
v.push_back(n);
ans=get_pairwise_xor(v);
for(auto h:ans)
{
if(s.find(h)==s.end())
{
s1[i].insert(h);
}
else
{
s.erase(s.find(h));
}
}
s1[i].erase(0);
//cout<<i<<" ";
//for(auto h:s1[i])cout<<(h^x)<<" ";
//cout<<endl;
}
ans.clear();
for(int i=0;i<n-1;i++)
{
ans.push_back(solve(i)^x);
}
ans.push_back(x);
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |