#include <bits/stdc++.h>
#include "library.h"
using namespace std;
#define pii pair<int, int>
vector<pii> eds;
vector<int> adj[1005];
int calc(vector<int> &v){
int cnt = 0;
for (auto it : v){
if (it) cnt++;
}
for (auto [x, y] : eds){
if (v[x] && v[y]) cnt--;
}
return cnt;
}
vector<int> ans;
void dfs(int cur, int par){
ans.push_back(cur+1);
for (auto it : adj[cur]){
if (it == par) continue;
dfs(it, cur);
}
}
void Solve(int n){
vector<int> tst(n, 0);
for (int i=2; i<=n; i++){
for (int j=0; j<i; j++) tst[j] = 1;
int x = Query(tst), y = calc(tst);
if (x == y) continue;
if (x == y-1){
int lo = 0, hi = i-2; //book number i is book number i-1, so upper bounds starts at i-2
while (lo < hi){
int mid = (lo+hi)/2;
for (int j=0; j<=mid; j++) tst[j] = 1;
for (int j=mid+1; j<i-1; j++) tst[j] = 0;
tst[i-1] = 1;
int nx = Query(tst), ny = calc(tst);
if (nx == ny-1) hi = mid;
else lo = mid+1;
}
eds.push_back({lo, i-1}); //lo is the book that is connected to book number i
}
else{
int lo = 0, hi = i-2;
while (lo < hi){
int mid = (lo+hi)/2;
for (int j=0; j<=mid; j++) tst[j] = 1;
for (int j=mid+1; j<i-1; j++) tst[j] = 0;
tst[i-1] = 1;
int nx = Query(tst), ny = calc(tst);
if (nx == ny-2) hi = mid;
else lo = mid+1;
}
eds.push_back({lo, i-1});
lo = 0, hi = i-2;
while (lo < hi){
int mid = (lo+hi)/2;
for (int j=0; j<=mid; j++) tst[j] = 1;
for (int j=mid+1; j<i-1; j++) tst[j] = 0;
tst[i-1] = 1;
int nx = Query(tst), ny = calc(tst);
if (nx == ny-1) hi = mid;
else lo = mid+1;
}
eds.push_back({lo, i-1});
}
}
for (auto [u, v] : eds){
adj[u].push_back(v);
adj[v].push_back(u);
}
for (int i=0; i<n; i++){
if (adj[i].size() <= 1){
dfs(i, -1);
break;
}
}
//cout << "size: " << ans.size() << "\n";
Answer(ans);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |