제출 #1339381

#제출 시각아이디문제언어결과실행 시간메모리
1339381kawhiet던전 (IOI21_dungeons)C++20
0 / 100
7091 ms580 KiB
#include <bits/stdc++.h>
#include "dungeons.h"
using namespace std;

constexpr int lg = 30;

int n;
vector<int> s, p, w, l;

vector<vector<int>> to, f; // pos, sum

void init(int _n, vector<int> _s, vector<int> _p, vector<int> _w, vector<int> _l) {
	n = _n;
	s = _s;
	p = _p;
	w = _w;
	l = _l;
	to.resize(n, vector<int>(lg));
	f.resize(n, vector<int>(lg));
	for (int i = 0; i < n; i++) {
		to[i][0] = l[i];
		f[i][0] = p[i];
	}
	for (int j = 1; j < lg; j++) {
		for (int i = 0; i < n; i++) {
			to[i][j] = to[to[i][j - 1]][j - 1];
			f[i][j] = f[i][j - 1] + f[to[i][j - 1]][j - 1];
		}
	}
}

long long simulate(int x, int z) {
	long long ans = z;
	for (int i = lg - 1; i >= 0; i--) {
		if (z + f[x][i] < s[0]) {
			ans += f[x][i];
			x = to[x][i];
		}
	}
	while (x != n) {
		if (ans >= s[x]) {
			ans += s[x];
			x = w[x];
		} else {
			ans += p[x];
			x = l[x];
		}
	}
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...