답안 #582033

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
582033 2022-06-23T09:49:03 Z almothana05 도서관 (JOI18_library) C++14
19 / 100
473 ms 3272 KB
#include <cstdio>
#include <vector>
#include <bits/stdc++.h>
#include "library.h"
using namespace std;
int f[2000];
vector<int>num , erge;
set<int>comp;
deque<int> ed[2000];
void Solve(int menge){
	int erg , cmp , numm , nummer;
	vector<int> M(menge);
	for(int i = 0 ; i > menge ; i++){
		M[i] = 0;
	}
	for(int i = 0 ; i < menge ;i++){
		num.push_back(i + 1);
	}
	for(int i = 1; i <= menge ; i++){
		
		ed[i].push_back(i);
	}
	int st , en , mit;
	erg = 1;
	// cout << "ja\n";
	for(int i = 2 ; i <= menge ; i++){

		for(int j = 1 ; j <= i ;j++){
			M[j - 1] = 1;
		}
		// for(int j = 0 ; j < M.size() ; j++){
		// 	cout << M[j] << " ";
		// }
		// cout << "\n";
		numm = Query(M);
		for(int j = 1 ; j <= i ;j++){
			M[j] = 0;
		}
		// cout << erg << ' ' << numm << "\n";
		if(numm == erg){
			// cout << "eins\n";
			st = 1; en = i - 1;
			while(st <= en){
				mit = (st + en)/2;
				// cout << mit << ' ';
				for(int j = 0 ; j < menge ; j++){
					if(num[j] <= mit){
						M[j] = 1;
						comp.insert(num[j]);
					}
				}
				M[i - 1] = 1;
				// for(int j = 0 ; j < menge ; j++){
					// cout << M[j] << ' ';
				// }
				// cout << "\n";
				nummer = Query(M);
				// cout << numm << "\n";
				for(int j = 0 ; j < menge ; j++){
					M[j] = 0;
				}

				if(nummer == comp.size()){
					// cout << "en\n";
					en = mit - 1;
				}
				else{
					st = mit + 1;
					// cout << "st\n";
				}
				comp.clear();
			}
			// cout << st << "\n";
			// cout << ed[st].size() << "\n";
			num[i - 1] = st;
			M[i - 1] = 1;
			M[ed[st].front() - 1] = 1;
			if(Query(M) == 1){
				ed[st].push_front(i);
			}
			else{
				ed[st].push_back(i);
			}
			M[i - 1] = 0;
			M[ed[st].front()] = 0;
		}
		else if(numm < erg){
			// cout << "zwei\n";
			int er ,zw;
			st = 1; en = i - 1;
			while(st <= en){
				mit = (st + en)/2;
				for(int j = 0 ; j < menge ; j++){
					if(num[j] <= mit){
						M[j] = 1;
						comp.insert(num[j]);
					}
				}
				M[i - 1] = 1;
				nummer = Query(M);
				
				for(int j = 0 ; j < menge ; j++){
					M[j] = 0;
				}

				if(nummer <= comp.size()){
					en = mit - 1;
				}
				else{
					st = mit + 1;
				}
				comp.clear();
			}
			er = st;
			M[i - 1] = 1;
			M[ed[st].front() - 1] = 1;
			if(Query(M) == 1){
				ed[st].push_front(i) ;
			}
			else{
				ed[st].push_back(i) ;
			}
			M[i - 1] = 0;
			M[ed[st].front()] = 0;



			st = 1; en = i - 1;
			while(st <= en){
				mit = (st + en)/2;
				// cout << mit << "\n";
				for(int j = 0 ; j < menge ; j++){
					if(num[j] <= mit){
						M[j] = 1;
						comp.insert(num[j]);
					}
				}
				M[i - 1] = 1;
				
				nummer = Query(M);
				for(int j = 0 ; j < menge ; j++){
					M[j] = 0;
				}

				if(nummer < comp.size()){
					en = mit - 1;
				}
				else{
					st = mit + 1;
				}
				comp.clear();
			}
			zw = st;
			// cout << er << ' ' << zw << "\n";
			M[i - 1] = 1;
			M[ed[st].front() - 1] = 1;
			if(Query(M) == 1){
				ed[st].push_front(i);
			}
			else{
				ed[st].push_back(i);
			}
			M[i - 1] = 0;
			M[ed[st].front()] = 0;

			if(ed[er].front() == ed[zw].back()){
				ed[er].pop_front();
				while(ed[zw].size()){
					num[ed[zw].back() - 1] = er;
					ed[er].push_front(ed[zw].back());
					ed[zw].pop_back();
				}
			}
			else if(ed[er].front() == ed[zw].front()){
				ed[er].pop_front();
				while(ed[zw].size()){
					num[ed[zw].front() - 1] = er;
					ed[er].push_front(ed[zw].front());
					ed[zw].pop_front();
				}
			}
			else if(ed[er].back() == ed[zw].front()){
				ed[er].pop_back();
				while(ed[zw].size()){
					num[ed[zw].front() - 1] = er;
					ed[er].push_back(ed[zw].front());
					ed[zw].pop_front();
				}
			}
			else{
				ed[er].pop_back();
				while(ed[zw].size()){
					num[ed[zw].back() - 1] = er;
					ed[er].push_back(ed[zw].back());
					ed[zw].pop_back();
				}
			}
			
		}
		erg = numm;
		// for(int i = 0 ; i < num.size() ; i++){
		// 	cout << num[i] << ' '; 
		// }
		// cout << "\n";
	}
	while(ed[num[0]].size()){
		// cout << ed[num[0]].front() << "\n";
		erge.push_back(ed[num[0]].front());
		ed[num[0]].pop_front();
	}
	Answer(erge);
}

Compilation message

library.cpp: In function 'void Solve(int)':
library.cpp:63:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::set<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   63 |     if(nummer == comp.size()){
      |        ~~~~~~~^~~~~~~~~~~~~~
library.cpp:106:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::set<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  106 |     if(nummer <= comp.size()){
      |        ~~~~~~~^~~~~~~~~~~~~~
library.cpp:145:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::set<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  145 |     if(nummer < comp.size()){
      |        ~~~~~~~^~~~~~~~~~~~~
library.cpp:11:12: warning: unused variable 'cmp' [-Wunused-variable]
   11 |  int erg , cmp , numm , nummer;
      |            ^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 32 ms 1616 KB # of queries: 1707
2 Correct 29 ms 1616 KB # of queries: 1693
3 Correct 37 ms 1616 KB # of queries: 1788
4 Correct 32 ms 1660 KB # of queries: 1769
5 Correct 38 ms 1616 KB # of queries: 1798
6 Correct 31 ms 1616 KB # of queries: 1777
7 Correct 37 ms 1616 KB # of queries: 1780
8 Correct 29 ms 1616 KB # of queries: 1703
9 Correct 35 ms 1616 KB # of queries: 1785
10 Correct 17 ms 1616 KB # of queries: 1068
11 Correct 1 ms 1616 KB # of queries: 0
12 Correct 1 ms 1616 KB # of queries: 3
13 Correct 1 ms 1616 KB # of queries: 6
14 Correct 1 ms 1616 KB # of queries: 11
15 Correct 2 ms 1616 KB # of queries: 74
16 Correct 3 ms 1616 KB # of queries: 155
# 결과 실행 시간 메모리 Grader output
1 Correct 32 ms 1616 KB # of queries: 1707
2 Correct 29 ms 1616 KB # of queries: 1693
3 Correct 37 ms 1616 KB # of queries: 1788
4 Correct 32 ms 1660 KB # of queries: 1769
5 Correct 38 ms 1616 KB # of queries: 1798
6 Correct 31 ms 1616 KB # of queries: 1777
7 Correct 37 ms 1616 KB # of queries: 1780
8 Correct 29 ms 1616 KB # of queries: 1703
9 Correct 35 ms 1616 KB # of queries: 1785
10 Correct 17 ms 1616 KB # of queries: 1068
11 Correct 1 ms 1616 KB # of queries: 0
12 Correct 1 ms 1616 KB # of queries: 3
13 Correct 1 ms 1616 KB # of queries: 6
14 Correct 1 ms 1616 KB # of queries: 11
15 Correct 2 ms 1616 KB # of queries: 74
16 Correct 3 ms 1616 KB # of queries: 155
17 Correct 473 ms 1836 KB # of queries: 11271
18 Correct 443 ms 1804 KB # of queries: 11158
19 Correct 473 ms 1724 KB # of queries: 11275
20 Runtime error 410 ms 3272 KB Execution killed with signal 6
21 Halted 0 ms 0 KB -