# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
744258 | 2023-05-18T10:03:31 Z | MON | 도서관 (JOI18_library) | C++14 | 0 ms | 0 KB |
#include <cstdio> #include <vector> #include "library.h" using namespace std; void Solve(int N) { vector<int> m(N,0); int queries = 0; vector<int> vecini[N + 1]; int luat[N] = {0}; for(int i = 0 ; i < N - 1 ; i++) { for(int j = 0 ; j < N ; j++) { m[i] = 1; m[j] = 1; int sunt = Query(m) & 1; queries++; if(sunt) vecini[i].emplace_back(j),vecini[j].emplace_back(i); m[i] = 0; m[j] = 0; } } vector<int> ans; if(queries > 20000) exit(1); for(int i = 0; i < N ; i++) { if(vecini[i].size() == 1) { ans.emplace_back(i + 1); luat[i] = 1; break; } } while(ans.size() != N) { for(auto &it : vecini[ans.back()]) { if(!luat[it]) { luat[it] = 1; ans.emplace_back(it + 1); break; } } } Answer(ans); }