# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1081351 | kustizus | Library (JOI18_library) | C++17 | 24 ms | 344 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.
// #pragma GCC optimize("O3","unroll-loops")
#include <bits/stdc++.h>
#include "library.h"
using namespace std;
// #define
#define all(v) v.begin(), v.end()
#define fi first
#define se second
mt19937_64 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
// declare
const int N=1e3;
bool vs[N+5];
vector <int> ans;
vector <int> g[N + 5];
void dfs(int i){
ans.push_back(i);
vs[i] = true;
for (int j : g[i])
if (!vs[j])
dfs(j);
}
void Solve(int n)
{
int now = 1;
for (int i = 1; i < n; i++){
vector <int> m;
for (int j = 1; j <= n; ++j)
if (!vs[j] && now != j)
m.push_back(j);
int l = 0, r = m.size() - 1, res = -1;
while (l < r)
{
int md = (l + r) / 2;
vector <int> ch(n);
for (int k = l; k <= md; ++k)
ch[m[k] - 1]=1;
int c1 = Query(ch);
ch[now - 1] = 1;
int c2 = Query(ch);
if (c1 >= c2) res = md, r = md - 1;
else l = md + 1;
}
if (res == -1)
{
vs[now] = 1;
now = 1;
}
else
{
vs[now] = 1;
res = m[res];
g[now].push_back(res);
g[res].push_back(now);
now = res;
}
}
int idx, mn = 2000;
for (int i = 1; i <= n; ++i)
if (g[i].size() <= mn)
{
mn = g[i].size();
idx = i;
}
for (int i = 1; i <= n; ++i) vs[i] = false;
dfs(idx);
Answer(ans);
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |