Submission #1162365

#TimeUsernameProblemLanguageResultExecution timeMemory
1162365zyq181Library (JOI18_library)C++20
100 / 100
118 ms440 KiB
#include <bits/stdc++.h> #include "library.h" using namespace std; int n; deque<int> rightside; int start; vector<int> q; vector<int> qc; bool determined[1010]; void findright(int numleft){ vector<int> remain; for(int a=0; a<n; a++){ if(!determined[a]) remain.push_back(a+1); } int lo = 0; int hi = numleft-1; while(lo < hi){ int m = (lo + hi)/2; //lo to m fill(q.begin(), q.end(), 0); fill(qc.begin(), qc.end(), 1); for(int a=lo; a<=m; a++){ q[remain[a]-1] = 1; qc[remain[a]-1] = 0; } for(auto it: rightside) qc[it-1] = 0; int r1 = Query(q); int r2 = Query(qc); if(r2 > r1) lo = m + 1; else hi = m; } int side = remain[lo]; if(numleft == n){ start = side; //cout << "START: " << start << '\n'; determined[side-1] = true; return; } //cout << "RIGHT: " << side << '\n'; rightside.push_front(side); determined[side-1] = true; } void Solve(int N){ n = N; q.resize(n, 0); qc.resize(n, 0); for(int a=n; a>=1; a--){ findright(a); } vector<int> ans; ans.resize(n); ans[0] = start; for(int a=1; a<n; a++) ans[a] = rightside[a-1]; Answer(ans); return; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...