Submission #906736

#TimeUsernameProblemLanguageResultExecution timeMemory
906736NK_Library (JOI18_library)C++17
100 / 100
204 ms540 KiB
// Success consists of going from failure to failure without loss of enthusiasm
#include <bits/stdc++.h>
#include "library.h"

using namespace std;

#define nl '\n'
#define pb push_back
#define pf push_front
#define sz(x) int(x.size())

template<class T> using V = vector<T>;
using vi = V<int>;

void Solve(int N) {	
	deque<int> d = {0};
	vi vis(N);

	while(sz(d) < N) {
		vi Q(N, 1); for(auto& x : d) Q[x] = 0;
		int F = (vis[d.front()] ? d.back() : d.front());
		vis[F] = (sz(d) > 1);

		// cout << "D: ";
		// for(auto& x : d) cout << x << " ";
		// cout << endl;

		// cout << "FOCUS: " << F << endl;

		while(1) {
			int on = accumulate(begin(Q), end(Q), 0);
			if (on == 1) {
				Q[F] = 1; if (Query(Q) != 1) break;
				Q[F] = 0;

				int adj = find(begin(Q), end(Q), 1) - begin(Q);
				// cout << "ADJ: " << adj << endl;
				if (d.front() == F) d.pf(adj);
				else d.pb(adj);
				break;
			}

			int amt = on / 2;

			vi L(N), R(N);
			for(int i = 0, cur = 0; i < N; i++) if (Q[i]) {
				if (cur < amt) L[i] = 1;
				else R[i] = 1;
				cur++;
			}

			int resL = Query(L);
			L[F] = 1; int resF = Query(L); L[F] = 0;

			if (resL >= resF) Q = L;
			else Q = R;
		}
	}

	vi ans(begin(d), end(d)); for(auto& x : ans) x++;

	// for(auto& x : ans) cout << x << " ";
	// cout << nl;

	Answer(ans);
}

// g++ -std=c++17 -O2 -o grader grader.cpp A.cpp
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...