제출 #606254

#제출 시각아이디문제언어결과실행 시간메모리
606254alireza_kaviani도서관 (JOI18_library)C++17
100 / 100
418 ms304 KiB
#include "library.h" #include <bits/stdc++.h> using namespace std; #define all(x) (x).begin(), (x).end() #define SZ(x) int((x).size()) void Solve(int n){ vector<int> M(n , 1); if(n == 1){ Answer(M); return; } vector<int> res; for(int i = 0 ; i < n ; i++){ M[i] = 0; if(Query(M) <= 1){ res.push_back(i); break; } M[i] = 1; } fill(all(M) , 0); M[res[0]] = 1; for(int i = 0 ; i < n ; i++){ if(M[i]) continue; M[i] = 1; if(Query(M) <= 1){ res.push_back(i); continue; } M[i] = 0; } for(int i = SZ(res) ; i < n ; i++){ fill(all(M) , 0); vector<int> vec; for(int j : res){ M[j] = 1; } for(int j = 0 ; j < n ; j++){ if(!M[j]){ vec.push_back(j); } } int lg = 0; while((1 << lg) < SZ(vec)) lg++; int ind = 0; for(int j = 0 ; j < lg ; j++){ vector<int> Q; for(int k = 0 ; k < SZ(vec) ; k++){ if(k & (1 << j)){ Q.push_back(vec[k]); } } for(int k : Q){ M[k] = 1; } int A = Query(M); M[res.back()] = 0; int B = Query(M); M[res.back()] = 1; for(int k : Q){ M[k] = 0; } if(A != B){ ind |= (1 << j); } } res.push_back(vec[ind]); } for(int i = 0 ; i < n ; i++){ res[i]++; } Answer(res); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...