# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
909886 | mickey080929 | Library (JOI18_library) | C++17 | 253 ms | 1232 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#include "library.h"
using namespace std;
int n;
vector<int> adj[1010];
int ask(vector<int> qry) {
int k = 0;
for (int i=0; i<n; i++) {
k += qry[i];
}
int al = 0;
for (int i=0; i<n; i++) {
for (auto &j : adj[i]) {
if (qry[i] && qry[j]) {
al ++;
}
}
}
al /= 2;
return k - Query(qry) - al;
}
void Solve(int N) {
n = N;
for (int i=0; i<N-1; i++) {
int lo = 1, hi = N-1;
while (lo < hi) {
int mid = lo + hi >> 1;
vector<int> qry(N, 0);
for (int j=0; j<=mid; j++) {
qry[j] = 1;
}
if (ask(qry)) hi = mid;
else lo = mid + 1;
}
int r = lo;
lo = 0; hi = r-1;
while (lo < hi) {
int mid = lo + hi + 1 >> 1;
vector<int> qry(N, 0);
for (int j=mid; j<=r; j++) {
qry[j] = 1;
}
if (ask(qry)) lo = mid;
else hi = mid - 1;
}
int l = lo;
adj[l].push_back(r);
adj[r].push_back(l);
}
int x;
for (int i=0; i<n; i++) {
if (adj[i].size() == 1) {
x = i;
break;
}
}
vector<int> ans;
int p = -1;
while (true) {
ans.push_back(x+1);
int nxt = -1;
for (auto &y : adj[x]) {
if (y != p) {
nxt = y;
}
}
if (nxt == -1) break;
p = x;
x = nxt;
}
Answer(ans);
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |