Submission #82739

#TimeUsernameProblemLanguageResultExecution timeMemory
82739hugo_pmXylophone (JOI18_xylophone)C++17
100 / 100
77 ms732 KiB
#include "xylophone.h"
#include <vector>
using namespace std;

const int borne = 5005;
int qq[borne][2];
int N;
bool s[borne];

void build()
{
	for (int i = 1; i < N; ++i) {
		qq[i][0] = query(i, i+1);
		if (i+1 != N) {
			qq[i][1] = query(i, i+2);
		}
		if (i != 0) {
			if (qq[i-1][1] == qq[i-1][0] + qq[i][0]) {
				s[i] = s[i-1];
			} else {
				s[i] = 1 - s[i-1];
			}
		}
	}
}

bool essai()
{
	int mm = 1;
	vector<int> ans(N);
	vector<bool> vu(N, false);
	ans[0] = 1;
	for (int i = 1; i < N; ++i) {
		if (s[i]) ans[i] = ans[i-1] + qq[i][0];
		else ans[i] = ans[i-1] - qq[i][0];
		mm = max(ans[i], mm);
	}

	for (int i = 0; i < N; ++i) {
		ans[i] += (N - mm);
		if (ans[i] < 1 || ans[i] > N || vu[ans[i]-1] || (ans[i] == N && vu[0] == false)) return false;
		vu[ans[i]-1] = true;
	}
	for (int i = 0; i < N; ++i) {
		answer(i+1, ans[i]);
	}
	return true;
}

void solve(int locN) {
	N = locN;
	build();
	if (essai()) return;
	for (int i = 0; i <= N; ++i) s[i] = 1 - s[i];
	essai();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...