제출 #1232654

#제출 시각아이디문제언어결과실행 시간메모리
1232654Timosh던전 (IOI21_dungeons)C++20
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>
#include "dungeons.h"
#define int int64_t

using namespace std;

int r = 27, N;

vector<vector<int>> P, B, SP, SB, MNP, MNB;

void init(int n, vector<int> s, vector<int> p, vector<int> w, vector<int> l)
{
	N = n;
	s.push_back(0);
	p.push_back(0);
	l.push_back(n);
	w.push_back(n);
	P.resize(n + 1);
	MNP.resize(n + 1);
	// sum - s
	B.resize(n + 1);
	MNB.resize(n + 1);
	// sum - p
	for (auto &i : P)
		i.resize(r);
	for (auto &i : B)
		i.resize(r);
	for (auto &i : SP)
		i.resize(r);
	for (auto &i : SB)
		i.resize(r);
	for (auto &i : MNP)
		i.resize(r);
	for (auto &i : MNB)
		i.resize(r);
	for (int i = 0; i <= n; i++)
		P[i][0] = w[i];
	for (int i = 0; i <= n; i++)
		B[i][0] = l[i];
	for (int i = 0; i < n; i++)
		SP[i][0] = s[i];
	for (int i = 0; i < n; i++)
		SB[i][0] = p[i];
	for (int j = 1; j < r; j++)
		for (int i = 0; i <= n; i++)
			P[i][j] = P[P[i][j - 1]][j - 1];
	for (int j = 1; j < r; j++)
		for (int i = 0; i <= n; i++)
			B[i][j] = B[P[i][j - 1]][j - 1];
	for (int j = 1; j < r; j++)
		for (int i = 0; i <= n; i++)
			SP[i][j] = SP[i][j - 1] + SP[P[i][j - 1]][j - 1];
	for (int j = 1; j < r; j++)
		for (int i = 0; i <= n; i++)
			SB[i][j] = SB[i][j - 1] + SB[B[i][j - 1]][j - 1];
	for (int i = 0; i <= n; i++)
		MNP[i][0] = s[i] - s[w[i]];
	for (int i = 0; i <= n; i++)
		MNB[i][0] = p[i] - p[l[i]];
	for (int j = 1; j < r; j++)
		for (int i = 0; i <= n; i++)
			MNP[i][j] = min({MNP[i][j - 1], MNP[P[i][j - 1]][j - 1], SP[P[i][j]][j] - s[P[i][j]]});
	for (int j = 1; j < r; j++)
		for (int i = 0; i <= n; i++)
			MNB[i][j] = min({MNB[i][j - 1], MNB[P[i][j - 1]][j - 1], SB[P[i][j]][j] - p[P[i][j]]});
	return;
}

long long simulate(int x, int z)
{
	while (x < N)
	{
		for (int i = r - 1; i >= 0; i--)
			if (MNP[x][i] + z >= 0 && P[x][i] < N)
				z += SP[x][i], x = P[x][i];
		for (int i = r - 1; i >= 0; i--)
			if (MNB[x][i] + z >= 0 && B[x][i] < N)
				z += SB[x][i], x = B[x][i];
		if (x == N)
			break;
		if (z >= SP[x][0])
			z += SP[x][0], x = P[x][0];
		else
			z += SB[x][0], x = B[x][0];
	}
	return z;
}

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

/usr/bin/ld: /tmp/ccvg15k0.o: in function `main':
grader.cpp:(.text.startup+0x39c): undefined reference to `init(int, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >)'
/usr/bin/ld: grader.cpp:(.text.startup+0x40c): undefined reference to `simulate(int, int)'
collect2: error: ld returned 1 exit status