Submission #101124

#TimeUsernameProblemLanguageResultExecution timeMemory
101124kdh9949Library (JOI18_library)C++17
100 / 100
488 ms632 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...