Submission #1189044

#TimeUsernameProblemLanguageResultExecution timeMemory
1189044petezaXoractive (IZhO19_xoractive)C++20
100 / 100
4 ms508 KiB
#include <bits/stdc++.h> #include "interactive.h" using namespace std; int last; vector<int> realol[8]; vector<int> guess(int n) { if(n <= 15) { vector <int> ans; for (int i = 1; i <= n; i++) { ans.push_back(ask(i)); } return ans; } vector<int> ans(n); ans.back() = ask(n); for(int k=0;k<7;k++) { vector<int> vec; for(int i=1;i<n;i++) { if(i & (1 << k)) vec.push_back(i); } if(vec.empty()) continue; auto r1 = get_pairwise_xor(vec); reverse(r1.begin(), r1.end()); while(!r1.empty() && r1.back() == 0) r1.pop_back(); vec.push_back(n); auto r2 = get_pairwise_xor(vec); reverse(r2.begin(), r2.end()); while(!r2.empty() && r2.back() == 0) r2.pop_back(); multiset<int> ms; for(int i=0;i<r2.size();i+=2) ms.insert(r2[i]); for(int i=0;i<r1.size();i+=2) {ms.erase(ms.find(r1[i]));} realol[k].clear(); for(auto &e:ms) realol[k].emplace_back(e); for(auto &e:realol[k]) e ^= ans.back(); } for(int i=1;i<n;i++) { set<int> candidates; for(int k=0;k<7;k++) { if((i>>k)&1) { for(auto &e:realol[k]) candidates.insert(e); } } for(int k=0;k<7;k++) { if((i >> k) & 1) { set<int> cinter; for(auto &e:realol[k]) { if(candidates.find(e) != candidates.end()) cinter.insert(e); } candidates = cinter; } else { for(auto &e:realol[k]) candidates.erase(e); } } assert(candidates.size() == 1); ans[i-1] = *candidates.begin(); } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...