Submission #412128

#TimeUsernameProblemLanguageResultExecution timeMemory
412128benedict0724Library (JOI18_library)C++17
100 / 100
390 ms576 KiB
#include <cstdio> #include <algorithm> #include <vector> #include <assert.h> #include "library.h" using namespace std; vector<int> adj[1002]; int U[1002]; void Solve(int N) { vector<int> M(N); M[0] = 1; int P = 1; for(int i = 1; i < N; i++) { int l = 0, r = i-1; M[i] = 1; int Q = Query(M); if(P < Q) { P = Q; continue; } while(l < r) { vector<int> v(N); int mid = (l + r)/2; for(int j=0;j<=mid;j++) v[j] = 1; int A, B; A = Query(v); v[i] = 1; B = Query(v); if(A >= B) r = mid; else l = mid+1; } adj[i].push_back(l); adj[l].push_back(i); if(P == Q) continue; l++; r = i-1; while(l < r) { vector<int> v(N); int mid = (l + r)/2; for(int j=0;j<=mid;j++) v[j] = 1; int A, B; A = Query(v); v[i] = 1; B = Query(v); if(A > B) r = mid; else l = mid+1; } adj[l].push_back(i); adj[i].push_back(l); P = Q; } vector<int> res(N); int st = 0; for(int i=0;i<N;i++) assert(adj[i].size() <= 2); int cnt = 0; for(int i=0;i<N;i++) if(adj[i].size() == 1) { st = i; cnt++; } // assert(cnt == 2); // assert(st >= 0); for(int i=0,now=st;i<N;i++) { res[i] = now+1; U[now] = 1; for(int nxt : adj[now]) { if(!U[nxt]) { now = nxt; break; } } } Answer(res); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...