제출 #448349

#제출 시각아이디문제언어결과실행 시간메모리
448349mosiashvililuka던전 (IOI21_dungeons)C++17
63 / 100
2224 ms991432 KiB
#include<bits/stdc++.h>
#include "dungeons.h"
using namespace std;
const int N=50009;
int msh[N][26][26];
long long a,b,c,d,e,i,j,k,ii,jj,zx,xc,S[N],P[N],W[N],L[N],dis[N][26][26],mn[N][26][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=0; i<a; i++){
		S[i+1]=Ss[i];P[i+1]=Pp[i];W[i+1]=Ww[i]+1;L[i+1]=Ll[i]+1;
	}
	for(i=1; i<=a; i++){
		for(k=0; k<=24; k++){
			if(S[i]<(1<<k)){
				msh[i][0][k]=W[i];
				dis[i][0][k]=S[i];
				mn[i][0][k]=99999999999999999LL;
			}else{
				msh[i][0][k]=L[i];
				dis[i][0][k]=P[i];
				mn[i][0][k]=S[i];
			}
		}
	}
	for(j=1; j<=24; j++){
		for(i=1; i<=a; i++){
			for(k=0; k<=24; k++){
				msh[i][j][k]=msh[msh[i][j-1][k]][j-1][k];
				dis[i][j][k]=dis[i][j-1][k]+dis[msh[i][j-1][k]][j-1][k];
				mn[i][j][k]=min(mn[i][j-1][k],mn[msh[i][j-1][k]][j-1][k]-dis[i][j-1][k]);
			}
		}
	}
	return;
}

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