#include "interactive.h"
#include<bits/stdc++.h>
using namespace std;
set<int> s;
vector<int> as[11];
vector<int> all;
vector<int> notall;
set<int> as2[11];
int xorrev(int now,int ans,int idx)
{
int b=0;
while(idx>0)
{
if((now&idx)!=(ans&idx))
b+=idx;
//cout<<now<<' '<<ans<<' '<<idx<<' '<<b<<'\n';
idx=idx>>1;
}
return b;
}
vector<int> guess(int n) {
vector <int> ans(n,0);
int st=ask(1);
for(int i=1;i<=n;i++) all.push_back(i);
all=get_pairwise_xor(all);
for(auto x:all)
s.insert(x);
for(int i=2;i<=n;i++) notall.push_back(i);
notall=get_pairwise_xor(notall);
for(auto x:notall)
s.erase(x);
/*cout<<"SET ";
for(auto it=s.begin();it!=s.end();it++)
cout<<*it<<' ';
cout<<'\n';*/
all.clear();
all.push_back(st);
for(auto it=s.begin();it!=s.end();it++)
{
all.push_back(xorrev(st,*it,1<<8));
}
//cout<<"W";
/*for(auto x:all) cout<<x<<' ';
cout<<'\n';*/
for(int i=1;i<n;i++)
{
for(int k=0;k<=8;k++)
{
if(all[i]&(1<<k)) as[k].push_back(i+1);//,cout<<all[i]<<'\n';
}
}
for(int i=0;i<=8;i++)
{
as[i].push_back(1);
/*for(auto x:as[i]) cout<<x;
cout<<'\n';*/
//cout<<i<<'\n';
as[i]=get_pairwise_xor(as[i]);
/*for(auto x:as[i]) cout<<x;
cout<<'\n';
cout<<'\n';*/
}
//cout<<"W";
for(int i=0;i<=8;i++)
{
for(auto x:as[i])
{
if(s.find(x)!=s.end()) as2[i].insert(xorrev(st,x,1<<8));//,cout<<x<<' '<<i<<'\n';
}
// cout<<'\n';
}
//cout<<"X";
//ans.push_back(st);
ans[0]=st;
for(auto x:all)
{
int b=0;
//cout<<x<<'\n';
for(int k=1;k<=8;k++)
{
if(as2[k].find(x)!=as2[k].end())
b+=(1<<(k-1));
//cout<<b<<' ';
}
//cout<<'\n';
ans[b]=x;
}
//cout<<"Y";
//for(int i=0;i<n;i++) cout<<ans[i]<<' ';
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |