Submission #1191956

#TimeUsernameProblemLanguageResultExecution timeMemory
1191956petezaLibrary (JOI18_library)C++20
100 / 100
126 ms476 KiB
#include <cstdio>
#include <vector>
#include <iostream>
#include "library.h"
using namespace std;

int exval[1005];
vector<int> adj[1005];
vector<int> ans;
bool vis[1005];

void dfs(int x) {
	vis[x] = 1; ans.push_back(x);
	for(auto &e:adj[x]) if(!vis[e]) dfs(e);
}

void Solve(int N)
{
	/*
	vector<int> M(N);

	for(int i = 0; i < N; i++) {
		M[i] = 1;
	}

	int A = Query(M);
	

	vector<int> res(N);

	for(int i = 0; i < N; i++) {
		res[i] = i + 1;
	}

	Answer(res);
	*/
	for(int i=1;i<=N;i++) exval[i] = i;
	for(int i=1;i<N;i++) {
		int l = 2, r = N, mid;
		while(l <= r) {
			mid = (l+r) >> 1;
			vector<int> toask(N);
			for(int i=0;i<mid;i++) toask[i] = 1;
			if(Query(toask) == exval[mid]) l = mid+1;
			else r = mid-1;
		}
		//cout << l;
		//r becomes the bla bla ble bla bla blo bla bla bla bla
		for(int i=l;i<=N;i++) exval[i]--;
		int cl = 1, cr = l-1;
		while(cl <= cr) {
			mid = (cl+cr) >> 1;
			vector<int> toask(N);
			for(int i=0;i<mid;i++) {
				toask[i] = 1;
			}
			toask[l-1] = 1;
			if(Query(toask) + (adj[l].empty() ? 0 : (adj[l][0] <= mid ? 1 : 0)) == exval[mid]+1) cl = mid+1;
			else cr = mid-1;
		}
		//cout << " Connected to " << cl << '\n';
		adj[l].push_back(cl);
		adj[cl].push_back(l);
	}
	for(int i=1;i<=N;i++) {
		if(adj[i].size()<2) {
			dfs(i);
			break;
		}
	}
	Answer(ans);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...