#include<bits/stdc++.h>
#include "interactive.h"
using namespace std;
const int MAXN=110;
const int PAW=10;
vector<int>g[PAW];
vector<int>a[PAW];
map<int,int>m;
int arr[MAXN];
vector<int>find_multitude_numbers(vector<int>pos,int x){/*
cout<<"In find numbers with: "<<endl;
for(int i=0;i<pos.size();i++){
cout<<pos[i]<<" ";
}
cout<<endl;*/
vector<int> ms_=get_pairwise_xor(pos);
multiset<int> ms;
//cout<<"ms: "<<endl;
for(int i=0;i<ms_.size();i+=2){
//cout<<ms[i]<<" ";
ms.insert(ms_[i]);
}
while(ms.find(0)!=ms.end()) ms.erase(0);
//for(int el:ms) cout<<el<<" ";
//cout<<endl;
pos.push_back(1);
vector<int>v_=get_pairwise_xor(pos);
multiset<int>v;
//cout<<"v: "<<endl;
for(int i=0;i<v_.size();i+=2){
v.insert(v_[i]);
}
while(v.find(0)!=v.end()) v.erase(0);
//for(int el:v) cout<<el<<" ";
//cout<<endl;
vector<int>nv={};
for(int el:v){
if(ms.find(el)!=ms.end()){
ms.erase(ms.find(el));
}else{
nv.push_back(el);
}
}
//nv.push_back(1);
for(int i=0;i<nv.size();i++){
nv[i]=nv[i]^x;
}
//cout<<"nv: "<<endl;
//for(int i=0;i<nv.size();i++) cout<<nv[i]<<" ";
//cout<<endl;
return nv;
}
vector<int> guess(int n){
int x=ask(1);
for(int paw=0;paw<=6;paw++){
//cout<<"for paw = "<<paw<<endl;
//cout<<"pos: "<<endl;
for(int i=2;i<=n;i++){
//cout<<"check: "<<i<<" "<<paw<<" "<<(1<<paw)<<" - "<<(i&(1<<paw))<<endl;
if((i&(1<<paw))!=0){
//cout<<"right: "<<i<<endl;
g[paw].push_back(i);
}
}
//cout<<endl;
if(g[paw].size()>0) a[paw]=find_multitude_numbers(g[paw],x);
}
for(int paw=0;paw<=6;paw++){
for(int el:a[paw]){
m[el]+=(1<<paw);
}
}
//cout<<"In m: "<<endl;
for(auto it:m){
//cout<<it.first<<" "<<it.second<<endl;
if(it.first!=0){
//cout<<it.first<<" "<<it.second<<endl;
arr[it.second]=it.first;
}
}
vector<int>result;
result.push_back(x);
for(int i=2;i<=n;i++){
result.push_back(arr[i]);
}
return result;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |