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 <cstdio>
#include <vector>
#include "library.h"
using namespace std;
const int N = 1005;
static int n, chk[N], ans[N];
static vector<int> rep;
int ask(vector<int> v){
vector<int> c(n, 0);
for(int i : v) c[i - 1] = 1;
return Query(c);
}
int ask(int x, int y){
vector<int> v(n, 0);
v[x - 1] = v[y - 1] = 1;
return Query(v);
}
void f(vector<int> cv, vector<int> tv, int cnt){
if(cv.size() == cnt){
for(int i : cv) rep.push_back(i);
return;
}
vector<int> cc(n + 1, 0);
vector<int> lv, rv, rrv;
for(int i = 0, j = 0; i < cv.size(); i++, j ^= 1){
if(j) lv.push_back(cv[i]);
else rv.push_back(cv[i]);
cc[cv[i]] = 1;
}
rrv = rv;
for(int i : tv) if(!cc[i]) rv.push_back(i);
int la = ask(lv);
int ra = ask(rv);
if(cnt == 1){
if(la == ra) f(lv, tv, 1);
else f(rrv, tv, 1);
}
else{
if(la > ra) f(lv, tv, 2);
else if(la < ra) f(rrv, tv, 2);
else{
f(lv, tv, 1);
f(rrv, tv, 1);
}
}
}
void Solve(int n){
::n = n;
for(int l = 0, r = n - 1; l < r; l++, r--){
rep.clear();
vector<int> v;
for(int i = 1; i <= n; i++) if(!chk[i]) v.push_back(i);
f(v, v, 2);
if(l && ask(ans[l - 1], rep[0]) > 1) swap(rep[0], rep[1]);
ans[l] = rep[0];
ans[r] = rep[1];
chk[rep[0]] = chk[rep[1]] = 1;
}
if(n & 1) for(int i = 1; i <= n; i++) if(!chk[i]) ans[n / 2] = i;
Answer(vector<int>(ans, ans + n));
}
Compilation message (stderr)
library.cpp: In function 'void f(std::vector<int>, std::vector<int>, int)':
library.cpp:24:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if(cv.size() == cnt){
~~~~~~~~~~^~~~~~
library.cpp:30:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i = 0, j = 0; i < cv.size(); i++, j ^= 1){
~~^~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |