Submission #1202914

#TimeUsernameProblemLanguageResultExecution timeMemory
1202914HappyCapybaraDungeons Game (IOI21_dungeons)C++17
37 / 100
7095 ms470880 KiB
#include "dungeons.h"
#include<bits/stdc++.h>
using namespace std;

#define ll long long

int n;
vector<int> p, l;
vector<vector<vector<ll>>> j;

void init(int n, vector<int> s, vector<int> p, vector<int> w, vector<int> l){
	::n = n;
	::p = p;
	::l = l;
	j.assign(n+1, vector<vector<ll>>(20, vector<ll>(3)));
	j[n][0] = {n, 0, 0};
	for (int i=0; i<n; i++) j[i][0] = {w[i], s[i], s[i]};
	for (int k=1; k<20; k++){
		for (int i=0; i<=n; i++) j[i][k] = {j[j[i][k-1][0]][k-1][0], j[i][k-1][1]+j[j[i][k-1][0]][k-1][1], max(j[i][k-1][2], j[j[i][k-1][0]][k-1][2]-j[i][k-1][1])};
	}
	return;
}

ll simulate(int x, int iz){
	ll z = iz;
	while (x != n){
		for (int k=19; k>=0; k--){
			if (z >= j[x][k][2]){
				z += j[x][k][1];
				x = j[x][k][0];
			}
		}
		if (x != n){
			z += p[x];
			x = l[x];
		}
	}
	return z;
}

#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...