제출 #1221198

#제출 시각아이디문제언어결과실행 시간메모리
1221198siyanaXoractive (IZhO19_xoractive)C++17
100 / 100
3 ms568 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...