답안 #775585

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
775585 2023-07-06T14:35:45 Z rxlfd314 도서관 (JOI18_library) C++17
100 / 100
260 ms 4400 KB
#include "library.h"
#include <bits/stdc++.h>
using namespace std;

void Solve(int N) {
	if (N == 1) {
		Answer({1});
		return;
	}
	if (N == 2) {
		Answer({1, 2});
		return;
	}

	vector<int> cc[N];
	for (int i = 0; i < N; i++) {
		cc[i].resize(N);
		iota(cc[i].begin(), cc[i].end(), 0);
		cc[i].erase(find(cc[i].begin(), cc[i].end(), i));
	}
	
	vector<int> adj[N];
	auto findBest = [&](int i) {
		int lo = 0, hi = cc[i].size();
		while (lo < hi) {
			int mid = lo + hi >> 1;
			vector<int> vec(N);
			for (int j = 0; j <= mid; j++) {
				vec[cc[i][j]] = 1;
			}
			int q = Query(vec);
			vec[i] = 1;
			q - Query(vec) < 0 ? lo = mid + 1 : hi = mid;
		}
		if (lo == cc[i].size()) return -1;
		int j = cc[i][lo];
		adj[i].push_back(j);
		adj[j].push_back(i);
		cc[j].erase(find(cc[j].begin(), cc[j].end(), i));
		cc[i].erase(find(cc[i].begin(), cc[i].end(), j));
		return j;
	};
	for (int cur = 0; cur >= 0; cur = findBest(cur));
	for (int cur = 0; cur >= 0; cur = findBest(cur));

	for (int i = 0; i < N; i++) {
		if (adj[i].size() < 2) {
			vector<int> ans(N);
			ans[0] = i;
			for (int j = 1, x = adj[i][0]; j < N; j++) {
				ans[j] = x;
				for (int k : adj[x]) {
					x = k == ans[j-1] ? x : k;
				}
			}
			for (int &j : ans) {
				j++;
			}
			Answer(ans);
			return;
		}
	}
}

Compilation message

library.cpp: In lambda function:
library.cpp:26:17: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   26 |    int mid = lo + hi >> 1;
      |              ~~~^~~~
library.cpp:35:10: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |   if (lo == cc[i].size()) return -1;
      |       ~~~^~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 32 ms 336 KB # of queries: 2954
2 Correct 34 ms 336 KB # of queries: 2932
3 Correct 34 ms 464 KB # of queries: 3110
4 Correct 28 ms 464 KB # of queries: 3096
5 Correct 34 ms 468 KB # of queries: 3092
6 Correct 29 ms 464 KB # of queries: 3110
7 Correct 35 ms 464 KB # of queries: 3108
8 Correct 42 ms 336 KB # of queries: 2964
9 Correct 39 ms 464 KB # of queries: 3092
10 Correct 24 ms 336 KB # of queries: 1820
11 Correct 0 ms 208 KB # of queries: 0
12 Correct 0 ms 208 KB # of queries: 0
13 Correct 1 ms 208 KB # of queries: 10
14 Correct 1 ms 208 KB # of queries: 16
15 Correct 2 ms 208 KB # of queries: 124
16 Correct 3 ms 208 KB # of queries: 268
# 결과 실행 시간 메모리 Grader output
1 Correct 32 ms 336 KB # of queries: 2954
2 Correct 34 ms 336 KB # of queries: 2932
3 Correct 34 ms 464 KB # of queries: 3110
4 Correct 28 ms 464 KB # of queries: 3096
5 Correct 34 ms 468 KB # of queries: 3092
6 Correct 29 ms 464 KB # of queries: 3110
7 Correct 35 ms 464 KB # of queries: 3108
8 Correct 42 ms 336 KB # of queries: 2964
9 Correct 39 ms 464 KB # of queries: 3092
10 Correct 24 ms 336 KB # of queries: 1820
11 Correct 0 ms 208 KB # of queries: 0
12 Correct 0 ms 208 KB # of queries: 0
13 Correct 1 ms 208 KB # of queries: 10
14 Correct 1 ms 208 KB # of queries: 16
15 Correct 2 ms 208 KB # of queries: 124
16 Correct 3 ms 208 KB # of queries: 268
17 Correct 171 ms 4276 KB # of queries: 19962
18 Correct 225 ms 4184 KB # of queries: 19718
19 Correct 196 ms 4400 KB # of queries: 19970
20 Correct 206 ms 3832 KB # of queries: 18692
21 Correct 181 ms 3480 KB # of queries: 17606
22 Correct 227 ms 4400 KB # of queries: 19970
23 Correct 260 ms 4264 KB # of queries: 19944
24 Correct 93 ms 1340 KB # of queries: 9252
25 Correct 227 ms 4228 KB # of queries: 19488
26 Correct 221 ms 3684 KB # of queries: 18284
27 Correct 108 ms 1360 KB # of queries: 9212
28 Correct 260 ms 4276 KB # of queries: 19968
29 Correct 256 ms 4280 KB # of queries: 19946
30 Correct 225 ms 4396 KB # of queries: 19968