제출 #44597

#제출 시각아이디문제언어결과실행 시간메모리
44597aome도서관 (JOI18_library)C++17
100 / 100
705 ms720 KiB
#include "library.h"
#include <bits/stdc++.h>

using namespace std;

int n;
vector<int> vec, res, res1, res2;

int query() {
	bool flag = 0;
	for (int i = 0; i < n; ++i) flag |= vec[i];
	if (!flag) return 0;
	return Query(vec);
}

int calc(int x, int y) {
	int ret = 0; 
	vec.assign(n, 0);
	for (int i = 0; i <= x; ++i) vec[i] = 1;
	vec[y] = 1, ret += query();
	vec[y] = 0, ret -= query();
	return ret;
}

void Solve(int _n) {
	n = _n;
	if (n == 1) {
		res.push_back(1), Answer(res); return;
	}
	int cur = 0, nxt = 0;	
	int l = 0, r = n - 1;
	while (l < r) {
		int mid = (l + r + 1) >> 1;
		if (calc(mid, cur) == 1) l = mid;
		else r = mid - 1; 
	}
	nxt = l + 1;
	int tmp = nxt;
	while (1) {
		int prv = cur; 
		cur = nxt, nxt = 0;
		res1.push_back(cur + 1);
		for (int j = 0; j < 10; ++j) {
			int ret = 0;
			vec.assign(n, 0);
			for (int k = 0; k < n; ++k) {
				if (!(k >> j & 1)) vec[k] = 1;
			}
			vec[prv] = 1;
			vec[cur] = 1, ret += query();
			vec[cur] = 0, ret -= query();
			nxt += (ret == 0) << j;
		}
		if (nxt == 1023) break;
	}
	cur = tmp, nxt = 0;
	while (1) {
		int prv = cur; 
		cur = nxt, nxt = 0;
		res2.push_back(cur + 1);
		if (res1.size() + res2.size() == n) break;
		for (int j = 0; j < 10; ++j) {
			int ret = 0;
			vec.assign(n, 0);
			int x = prv >> j & 1;
			for (int k = 0; k < n; ++k) {
				if ((k >> j & 1) == x) vec[k] = 1;
			}
			vec[cur] = 1, ret += query();
			vec[cur] = 0, ret -= query();
			nxt += (x ^ (ret == 0)) << j;
		}
	}
	reverse(res1.begin(), res1.end());
	res = res1;
	for (auto i : res2) res.push_back(i);
	Answer(res);
}

컴파일 시 표준 에러 (stderr) 메시지

library.cpp: In function 'void Solve(int)':
library.cpp:61:33: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if (res1.size() + res2.size() == n) break;
       ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...