제출 #224215

#제출 시각아이디문제언어결과실행 시간메모리
224215bortozXoractive (IZhO19_xoractive)C++17
100 / 100
11 ms444 KiB
#include "bits/stdc++.h" #include "interactive.h" using namespace std; vector<int> guess(int N) { vector<int> ans(N, -1); ans[0] = ask(1); vector<vector<int>> can(N); for (int k = 0; k < 7; k++) { vector<int> pos, A, B, C; for (int i = 0; i < N; i++) { if (~i & 1 << k) { pos.push_back(i + 1); } } A = get_pairwise_xor(pos); pos.erase(pos.begin()); B = get_pairwise_xor(pos); set_difference(A.begin(), A.end(), B.begin(), B.end(), back_inserter(C)); C.erase(find(C.begin(), C.end(), 0)); for (int& i : C) { i ^= ans[0]; } C.erase(unique(C.begin(), C.end()), C.end()); sort(C.begin(), C.end()); for (int i = 1; i < N; i++) { if (~i & 1 << k) { if (can[i].empty()) { can[i] = C; } else { can[i].erase(set_intersection(can[i].begin(), can[i].end(), C.begin(), C.end(), can[i].begin()), can[i].end()); } } } } while (count(ans.begin(), ans.end(), -1)) { for (int i = 1; i < N; i++) { if (ans[i] == -1 && can[i].size() == 1) { ans[i] = can[i][0]; for (int j = 1; j < N; j++) { auto it = find(can[j].begin(), can[j].end(), ans[i]); if (it != can[j].end()) { can[j].erase(it); } } } } } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...