Submission #1056213

#TimeUsernameProblemLanguageResultExecution timeMemory
1056213Huseyn123Dungeons Game (IOI21_dungeons)C++17
0 / 100
380 ms1259960 KiB
#include <bits/stdc++.h> 
#include "dungeons.h"
#define INF LLONG_MAX
using namespace std;
typedef long long ll;
const int lg=25;
ll st[3][lg][lg][50001];
vector<int> S,P,W,L;
int N;
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;
	for(int i=0;i<lg;i++){
		for(int z=0;z<n;z++){
			if(s[z]<(1<<i)){
				st[0][i][0][z]=s[z];
				if(w[z]!=n && s[w[z]]<(1<<i)){
					st[1][i][0][z]=-INF;
				}
				else{
					st[1][i][0][z]=s[z]-s[w[z]];
				}
				st[2][i][0][z]=w[z];
			}
			else{
				st[0][i][0][z]=p[z];
				if(l[z]!=n && s[l[z]]<(1<<i)){
					st[1][i][0][z]=-INF;
				}
				else{
					st[1][i][0][z]=p[z]-s[l[z]];
				}
				st[2][i][0][z]=l[z];
			}
		}
		st[0][i][0][n]=0;
		st[1][i][0][n]=0;
		st[2][i][0][n]=n;
		for(int j=1;j<lg;j++){
			for(int z=0;z<n;z++){
				int ind=st[2][i][j-1][z];
				st[0][i][j][z]=st[0][i][j-1][z]+st[0][i][j-1][ind];
				st[1][i][j][z]=st[1][i][j-1][z];
				if(st[1][i][j-1][ind]!=-INF){
					st[1][i][j][z]=max(st[1][i][j-1][z],st[1][i][j-1][ind]+st[0][i][j-1][z]);
				}
				st[2][i][j][z]=st[2][i][j-1][st[2][i][j-1][z]];
			}
		}
	}
	return;
}
long long simulate(int x, int z) {
	ll res=z;
	while(x!=N){
		int h=0; 
		for(int i=0;i<res;i++){
			if((res&(1<<i))){
				h=i;
			}
		}
		if(S[x]>=(1LL<<h) && res>=S[x]){
			res+=S[x];
			x=W[x];
		}
		else{
			for(int i=lg-1;i>=0;i--){
				if(st[1][h][i][x]<-res){
					res+=st[0][h][i][x];
					x=st[2][h][i][x];
				}
			}
			res+=st[0][h][0][x];
			x=st[2][h][0][x];
		}
	}
	return res;
}

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