Submission #376443

#TimeUsernameProblemLanguageResultExecution timeMemory
376443peijarLibrary (JOI18_library)C++17
0 / 100
141 ms620 KiB
#include <bits/stdc++.h>
#include "library.h"
using namespace std;

void Solve(int nbElem)
{
	cerr << "HEY"<<endl;
	vector<int> ret(nbElem);
	if (nbElem == 1)
	{
		ret[1] = 1;
		Answer(ret);
		return ;
	}
	vector<int> tabRequete(nbElem,1);
	int extremGauche=-1;
	for (int i(0); i < nbElem; ++i)
	{
		tabRequete[i] = 0;
		int query = Query(tabRequete);
		tabRequete[i] = 1;
		if (query == 1)
		{
			extremGauche = i;
			break;
		}
	}
	fill(tabRequete.begin(), tabRequete.end(), 0);
	tabRequete[extremGauche] = 1;
	vector<int> restant;
	for (int i(0); i < nbElem; ++i)
		if (i != extremGauche)
			restant.push_back(i);

	ret[0] = extremGauche;
	for (int i(1); i < nbElem; ++i)
	{
		int deb(0), fin((int)restant.size()-1);
		for (auto v : restant)
			cerr << v + 1 << ' ';
		cerr << endl;
		while (deb < fin)
		{
			int mid = (deb + fin) / 2;
			tabRequete.assign(nbElem, 0);
			for (int iReq(deb); iReq <= mid; ++iReq)
				tabRequete[restant[iReq]] = 1;
			int retSans = Query(tabRequete);
			tabRequete[ret[i-1]] = 1;
			int retAvec = Query(tabRequete);
			if (retAvec == retSans)
				fin = mid;
			else
				deb = mid+1;
		}
		ret[i] = restant[deb];
		restant.erase(lower_bound(restant.begin(), restant.end(), restant[deb]));
	}
	for (auto &v : ret) v++;
	for (auto v: ret) cerr << v << ' ';
	cerr << endl;
	Answer(ret);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...