제출 #606246

#제출 시각아이디문제언어결과실행 시간메모리
606246alireza_kaviani도서관 (JOI18_library)C++17
0 / 100
48 ms336 KiB
#include "library.h"
#include <bits/stdc++.h>
using namespace std;

#define all(x)	(x).begin(), (x).end()
#define SZ(x)	int((x).size())

void Solve(int n){
	vector<int> M(n , 1);
	vector<int> res;
	for(int i = 0 ; i < n ; i++){
		M[i] = 0;
		if(Query(M) <= 1){
			res.push_back(i);
			break;
		}
		M[i] = 1;
	}
	fill(all(M) , 0);
	M[res[0]] = 1;
	for(int i = 0 ; i < n ; i++){
		if(M[i])	continue;
		M[i] = 1;
		if(Query(M) <= 1){
			res.push_back(i);
			continue;
		}
		M[i] = 0;
	}
	for(int i = SZ(res) ; i < n ; i++){
		fill(all(M) , 0);
		vector<int> vec;
		for(int j : res){
			M[j] = 1;
		}
		for(int j = 0 ; j < n ; j++){
			if(!M[j]){
				vec.push_back(j);
			}
		}
		int lg = 0;
		while((1 << lg) < SZ(vec))	lg++;
		int ind = 0;
		for(int i = 0 ; i < lg ; i++){
			vector<int> Q;
			for(int j = 0 ; j < SZ(vec) ; j++){
				if(j & (1 << i)){
					Q.push_back(vec[j]);
				}
			}
			for(int j : Q){
				M[j] = 1;
			}
			int A = Query(M);
			M[res.back()] = 0;
			int B = Query(M);
			M[res.back()] = 1;
			for(int j : Q){
				M[j] = 0;
			}
			if(A != B){
				ind |= (1 << i);
			}
		}
		res.push_back(vec[ind]);
	}
	for(int i = 0 ; i < n ; i++){
		res[i]++;
	}
	Answer(res);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...