제출 #1159902

#제출 시각아이디문제언어결과실행 시간메모리
1159902Der_VlaposXylophone (JOI18_xylophone)C++20
컴파일 에러
0 ms0 KiB
#include "xylophone.h"
#include <bits/stdc++.h>

using namespace std;

#define pii pair<int, int>
#define f first
#define s second
#define ll long long
#define pb push_back
#define all(v) v.begin(), v.end()

map<pii, int> rem;

int req(int l, int r)
{
	if (rem[{l, r}])
		return rem[{l, r}];
	return rem[{l, r}] = query(l + 1, r + 1);
}

void solve(int n)
{
	int L = 0, R = n - 1;

	while (R - L > 1)
	{
		int M = (L + R) >> 1;
		if (req(0, M) == n - 1)
			R = M;
		else
			L = M;
	}

	{
		vector<int> a(n);
		a[0] = 0;
		a[1] = req(0, 1);
		int p = 0;

		for (int i = p + 2; i < n; ++i)
		{
			int v1 = req(i - 2, i);
			int v2 = req(i - 1, i);
			int mx = max(a[i - 2], a[i - 1]);
			int mn = min(a[i - 2], a[i - 1]);
			int d = mx - mn;
			if (d == v1)
			{
				if (a[i - 1] == mn)
					a[i] = a[i - 1] + v2;
				else
					a[i] = a[i - 1] - v2;
			}
			else
			{
				if (v1 == v2)
				{
					if (a[i - 1] == mn)
						a[i] = a[i - 1] + v2;
					else
						a[i] = a[i - 1] - v2;
				}
				else
				{
					if (a[i - 1] == mn)
						a[i] = a[i - 1] - v2;
					else
						a[i] = a[i - 1] + v2;
				}
			}
		}

		int mn = 0;
		for (int i = 0; i < n; ++i)
			mn = min(mn, a[i]);
		for (int i = 0; i < n; ++i)
		{
			a[i] -= mn;
		}
		bool good = true;
		vector<int> pos(n);
		for (int i = 0; i < n; ++i)
		{
			if (0 <= a[i] and a[i] < n)
			{
			}
			else
			{
				good = false;
				break;
			}
			pos[a[i]] = i;
		}

		if (good and pos[0] < pos[n - 1])
			for (int i = 1; i <= n; i++)
				answer(i, a[i - 1] + 1);
	}
	{
		vector<int> a(n);
		a[0] = 0;
		a[1] = -req(0, 1);
		int p = 0;

		for (int i = p + 2; i < n; ++i)
		{
			int v1 = req(i - 2, i);
			int v2 = req(i - 1, i);
			int mx = max(a[i - 2], a[i - 1]);
			int mn = min(a[i - 2], a[i - 1]);
			int d = mx - mn;
			if (d == v1)
			{
				if (a[i - 1] == mn)
					a[i] = a[i - 1] + v2;
				else
					a[i] = a[i - 1] - v2;
			}
			else
			{
				if (v1 == v2)
				{
					if (a[i - 1] == mn)
						a[i] = a[i - 1] + v2;
					else
						a[i] = a[i - 1] - v2;
				}
				else
				{
					if (a[i - 1] == mn)
						a[i] = a[i - 1] - v2;
					else
						a[i] = a[i - 1] + v2;
				}
			}
		}

		int mn = 0;
		for (int i = 0; i < n; ++i)
			mn = min(mn, a[i]);
		for (int i = 0; i < n; ++i)
			a[i] -= mn;

		bool good = true;
		vector<int> pos(n);
		for (int i = 0; i < n; ++i)
		{
			if (0 <= a[i] and a[i] < n)
			{
			}
			else
			{
				good = false;
				break;
			}
			pos[a[i]] = i;
		}

		if (good and pos[0] < pos[n - 1])
			for (int i = 1; i <= n; i++)
				answer(i, a[i - 1] + 1);
	}
}

#include <cstdio>
#include <cstdlib>
#include "xylophone.h"

static const int N_MAX = 5000;
static const int Q_MAX = 10000;
static int N;
static int A[N_MAX];
static bool used[N_MAX];
static int query_c;
static int answer_c;

int query(int s, int t)
{
	if (query_c >= Q_MAX)
	{
		printf("Wrong Answer\n");
		exit(0);
	}
	query_c++;
	if (!(1 <= s && s <= t && t <= N))
	{
		printf("Wrong Answer\n");
		exit(0);
	}
	int mx = 0, mn = N + 1;
	for (int i = s - 1; i < t; i++)
	{
		if (mx < A[i])
		{
			mx = A[i];
		}
		if (mn > A[i])
		{
			mn = A[i];
		}
	}
	return mx - mn;
}

void answer(int i, int a)
{
	answer_c++;
	if (!(1 <= i && i <= N))
	{
		printf("Wrong Answer\n");
		exit(0);
	}
	if (!(1 <= a && a <= N))
	{
		printf("Wrong Answer\n");
		exit(0);
	}
	if (used[i - 1])
	{
		printf("Wrong Answer\n");
		exit(0);
	}
	if (a != A[i - 1])
	{
		printf("Wrong Answer\n");
		exit(0);
	}
	used[i - 1] = true;
}

int main()
{
	query_c = 0;
	answer_c = 0;
	if (scanf("%d", &N) != 1)
	{
		fprintf(stderr, "Error while reading input\n");
		exit(1);
	}
	for (int i = 0; i < N; i++)
	{
		if (scanf("%d", A + i) != 1)
		{
			fprintf(stderr, "Error while reading input\n");
			exit(1);
		}
		used[i] = false;
	}
	solve(N);
	if (!(answer_c == N))
	{
		printf("Wrong Answer\n");
		exit(0);
	}
	printf("Accepted : %d\n", query_c);
}

컴파일 시 표준 에러 (stderr) 메시지

/usr/bin/ld: /tmp/cct0MDLi.o: in function `query(int, int)':
grader.cpp:(.text+0x0): multiple definition of `query(int, int)'; /tmp/ccOB1ucI.o:xylophone.cpp:(.text+0x0): first defined here
/usr/bin/ld: /tmp/cct0MDLi.o: in function `answer(int, int)':
grader.cpp:(.text+0xa0): multiple definition of `answer(int, int)'; /tmp/ccOB1ucI.o:xylophone.cpp:(.text+0xa0): first defined here
/usr/bin/ld: /tmp/cct0MDLi.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccOB1ucI.o:xylophone.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status