답안 #168229

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
168229 2019-12-12T03:30:22 Z dimash241 도서관 (JOI18_library) C++17
100 / 100
528 ms 536 KB
#include<bits/stdc++.h>
#include "library.h"

#define F first
#define S second
#define sz(x) (int)x.size()
#define pb push_back 
using namespace std;

bool SEND = 1;
                                         
int n, a[2222];

int ask (const std::vector < int > &m) {
	if (SEND) {
		return Query(m);
	}

	int n = (int)m.size();
	int res = 0;
	for (int i = 0, j = 0; i < n; i ++) {
		j = i;
		while (j < n && m[a[j]]) j ++;

		if (m[a[i]]) {
			res ++;
//			cerr << i << ' ' << j << '\n';
		}	

		i = j;
	}
	/*cerr << "Que " << res << '\n';
	for (auto it : m) {
		cerr << it << ' ';
	}
	cout << '\n'; */
	assert(res > 0);
	return res;
}


void print (const std:: vector <int> &res) {
	if (SEND) {
		Answer(res);

	} else {
		for (auto x : res)
			cout << x << ' ';
		cout << '\n';
		exit(0);	
	}
}

int go (int n, int x, vector < int > &vec) {
	vector < int > all;
	for (int i = 0; i < n; i ++) if (vec[i]) {
		all.pb(i);
	}
	//cerr << all.size() << ' ' << x << '\n';
	assert(all.size() > 0);
	
	if (all.size() == 1) {
		return all.back();
	}

	vector < int > p1(n, 0);
	vector < int > p2(n, 0);

	for (int i = 0; i < all.size(); i ++) {
		if (i < all.size() / 2) {
			p1[all[i]] = 1;
	//		cerr << all[i] << " r :";
		} else {
			p2[all[i]] = 1;
	//		cerr << all[i] << " w :";
		}
	}

	int was = ask(p1);
	//cerr << was << '\n';
	p1[x] = 1;

	if (ask(p1) == was) {
		p1[x] = 0;
	//	cerr << "tur1\n";
		return go(n, x, p1);
	}

	//cerr << "tur2\n";
	return go(n, x, p2);
}

void Solve(int n) {
	if (n == 1) {
		print({1});
		return;
	}
	if (n == 2) {
		print({1, 2});
		return;
	}
	vector < int > m(n, 1);
	int start = -1;
	for (int i = 0; i < n; i ++) {
		m[i] = 0;

		if (ask(m) == 1) {
			start = i;
			break;
			
		}

		m[i] = 1;
	}
	vector < int > ans;
	ans.pb(start);
//	cout << start << '\n';
//	exit(0);

	for (int i = 1; i < n; i ++) {
		vector < int > vec(n, 1);
		for (auto x : ans) vec[x] = 0;
		
		int x = go(n, ans.back(), vec);
	//	cout << i << ' ' << x << '\n';
		ans.pb(x);
	}

	for (auto &to : ans) to++;
	if (sz(ans) == n - 1) {
		cout << "wtf";
		exit(0);
	}

	print(ans);
}



// B...a

Compilation message

library.cpp: In function 'int go(int, int, std::vector<int>&)':
library.cpp:69:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < all.size(); i ++) {
                  ~~^~~~~~~~~~~~
library.cpp:70:9: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if (i < all.size() / 2) {
       ~~^~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 42 ms 248 KB # of queries: 2375
2 Correct 45 ms 376 KB # of queries: 2409
3 Correct 49 ms 248 KB # of queries: 2648
4 Correct 33 ms 320 KB # of queries: 2595
5 Correct 46 ms 376 KB # of queries: 2508
6 Correct 37 ms 320 KB # of queries: 2551
7 Correct 51 ms 248 KB # of queries: 2544
8 Correct 48 ms 376 KB # of queries: 2420
9 Correct 50 ms 376 KB # of queries: 2546
10 Correct 25 ms 528 KB # of queries: 1474
11 Correct 2 ms 248 KB # of queries: 0
12 Correct 2 ms 248 KB # of queries: 0
13 Correct 2 ms 376 KB # of queries: 4
14 Correct 2 ms 376 KB # of queries: 7
15 Correct 3 ms 252 KB # of queries: 77
16 Correct 4 ms 320 KB # of queries: 183
# 결과 실행 시간 메모리 Grader output
1 Correct 42 ms 248 KB # of queries: 2375
2 Correct 45 ms 376 KB # of queries: 2409
3 Correct 49 ms 248 KB # of queries: 2648
4 Correct 33 ms 320 KB # of queries: 2595
5 Correct 46 ms 376 KB # of queries: 2508
6 Correct 37 ms 320 KB # of queries: 2551
7 Correct 51 ms 248 KB # of queries: 2544
8 Correct 48 ms 376 KB # of queries: 2420
9 Correct 50 ms 376 KB # of queries: 2546
10 Correct 25 ms 528 KB # of queries: 1474
11 Correct 2 ms 248 KB # of queries: 0
12 Correct 2 ms 248 KB # of queries: 0
13 Correct 2 ms 376 KB # of queries: 4
14 Correct 2 ms 376 KB # of queries: 7
15 Correct 3 ms 252 KB # of queries: 77
16 Correct 4 ms 320 KB # of queries: 183
17 Correct 528 ms 420 KB # of queries: 17982
18 Correct 503 ms 476 KB # of queries: 17293
19 Correct 501 ms 504 KB # of queries: 17467
20 Correct 482 ms 376 KB # of queries: 16325
21 Correct 433 ms 504 KB # of queries: 15324
22 Correct 506 ms 504 KB # of queries: 17669
23 Correct 518 ms 416 KB # of queries: 17224
24 Correct 172 ms 248 KB # of queries: 7915
25 Correct 524 ms 376 KB # of queries: 17136
26 Correct 473 ms 536 KB # of queries: 15963
27 Correct 208 ms 248 KB # of queries: 8040
28 Correct 465 ms 504 KB # of queries: 15957
29 Correct 442 ms 408 KB # of queries: 15939
30 Correct 445 ms 328 KB # of queries: 15957