Submission #440538

#TimeUsernameProblemLanguageResultExecution timeMemory
440538mosiashvililukaDungeons Game (IOI21_dungeons)C++17
37 / 100
7041 ms278832 KiB
#include "dungeons.h"
#include <bits/stdc++.h>
using namespace std;
long long a,b,c,d,e,i,j,ii,jj,zx,xc,S[400009],P[400009],W[400009],L[400009],msh[400009][26],dis[400009][26],mn[400009][26],z;
void init(int Nn, std::vector<int> Ss, std::vector<int> Pp, std::vector<int> Ww, std::vector<int> Ll) {
	a=Nn;
	for(i=1; i<=a; i++){
		S[i]=Ss[i-1];P[i]=Pp[i-1];
		W[i]=Ww[i-1]+1;L[i]=Ll[i-1]+1;
	}
	for(i=1; i<=a; i++){
		msh[i][0]=W[i];dis[i][0]=S[i];mn[i][0]=-S[i];
	}
	for(j=1; j<=24; j++){
		for(i=1; i<=a; i++){
			msh[i][j]=msh[msh[i][j-1]][j-1];
			dis[i][j]=dis[i][j-1]+dis[msh[i][j-1]][j-1];
			mn[i][j]=min(mn[i][j-1],mn[msh[i][j-1]][j-1]+dis[i][j-1]);
		}
	}
	return;
}

long long simulate(int Xx, int Zz) {
	Xx++;
	z=Zz;
	
	i=Xx;
	while(i!=a+1){
		for(j=24; j>=0; j--){
			if(msh[i][j]==0||msh[i][j]==a+1) continue;
			if(mn[i][j]+z<0) continue;
			z+=dis[i][j];
			i=msh[i][j];
		}
		if(S[i]<=z){
			z+=S[i];i=W[i];
		}else{
			z+=P[i];i=L[i];
		}
	}
	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...