Submission #740070

#TimeUsernameProblemLanguageResultExecution timeMemory
740070maeolaXylophone (JOI18_xylophone)C++17
100 / 100
107 ms444 KiB
#include "xylophone.h"
#include <bits/stdc++.h>
using namespace std;

static int g1[5005], g2[5005], A[5005];

void solve(int N)
{
	for (int i = 1; i <= N - 1; i++)
		g1[i] = query(i, i + 1);
	for (int i = 1; i <= N - 2; i++)
		g2[i] = query(i, i + 2);

	A[1] = 0;
	A[2] = g1[1];
	for (int i = 3; i <= N; i++)
	{
		// A[i - 1] + g1[i - 1]
		// A[i - 1] - g1[i - 1]
		if (g1[i - 2] + g1[i - 1] == g2[i - 2])
		{
			if (A[i - 1] > A[i - 2])
			{
				A[i] = A[i - 1] + g1[i - 1];
			}else{
				A[i] = A[i - 1] - g1[i - 1];
			}
		}
		else
		{
			if (A[i - 1] > A[i - 2])
			{
				A[i] = A[i - 1] - g1[i - 1];
			}else{
				A[i] = A[i - 1] + g1[i - 1];
			}
		}
	}
	auto mni = min_element(A + 1, A + 1 + N) - A;
	auto mxi = max_element(A + 1, A + 1 + N) - A;
	if (mni > mxi)
	{
		for (int i = 1; i <= N; i++)
			A[i] = -A[i];
	}
	auto mn = *min_element(A + 1, A + 1 + N);
	for (int i = 1; i <= N; i++)
		answer(i, A[i] - mn + 1);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...