# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
344044 | tengiz05 | Library (JOI18_library) | C++17 | 0 ms | 0 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"
#include "grader.cpp"
using namespace std;
void Solve(int n){
if(n == 1){
vector<int> ans = {1};
Answer(ans);
return;
}
vector<int> haha(n,0);
for(int i=0;i<n;i++)haha[i] = i;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int seed_for = uniform_int_distribution<int>(0,1000000000)(rng);
shuffle(haha.begin(), haha.end(), default_random_engine(seed_for));
vector<vector<int>> v(n);
for(int i=0;i<n;i++){
int I = haha[i];
if(v[I].size() == 2)continue;
vector<int> ask(n, 0);
ask[I] = 1;
for(int j=i+1;j<n;j++){
int J = haha[j];
if(v[J].size() == 2)continue;
ask[J] = 1;
if(Query(ask) == 1)v[I].push_back(J), v[J].push_back(I);
ask[J] = 0;
}
}
//~ for(int i=0;i<n;i++){for(auto x : v[i])cout << x << ' ';cout << '\n';}
vector<bool> used(n);
vector<int> ans;
int u=-1;
for(int i=0;i<n;i++){
if(v[i].size() == 1){
u = i;break;
}
}
assert(u != -1);
while(true){
bool ch = false;
used[u] = true;
ans.push_back(u+1);
for(auto to : v[u]){
if(!used[to]){
ch=true;
u=to;
}
}if(!ch)break;
}
Answer(ans);
return;
}
/*
5
4 2 5 3 1
*/