Submission #267226

#TimeUsernameProblemLanguageResultExecution timeMemory
267226ShisukoLibrary (JOI18_library)C++14
19 / 100
3027 ms20556 KiB
#include <cstdio>
#include <chrono>
#include <random>
#include <algorithm>
#include <vector>
#include <set>
#include <iostream>
#include "library.h"
using namespace std;

void Solve(int N)
{
	if(N==1)
	{
		Answer({1});
		return;
	}
	mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
	vector<int> M(N,0);

	vector<vector<int>> adj(N);
	set<pair<int,int>> done;
	int links = 0;
	while(links < N-1)
	{
		int x = uniform_int_distribution<int>(0,N-2)(rng);
		int y = uniform_int_distribution<int>(x+1,N-1)(rng);
		if(done.find({x,y})==done.end())
		{
			done.insert({x,y});
			M[x] = M[y] = 1;
			if(Query(M)==1)
			{
				adj[x].push_back(y);
				adj[y].push_back(x);
				links++;
			}
			M[x] = M[y] = 0;
		}
	}
	vector<int> res(N);
	for(int g = 0; g < N; g++)
		if(adj[g].size()==1)
		{
			res[0] = g;
			break;
		}
		
	for(int i = 1; i < N; i++)
	{
		for(const int& g : adj[res[i-1]])
			if(i==1 || g!=res[i-2])
				res[i] = g;
	}
	for(int& g : res)
		++g;
	Answer(res);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...