제출 #1027819

#제출 시각아이디문제언어결과실행 시간메모리
1027819edogawa_something던전 (IOI21_dungeons)C++17
0 / 100
45 ms52684 KiB
#include "dungeons.h"
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<ll> vii;
typedef pair<ll,ll> pii;
#define F first 
#define S second 
#define pb push_back
#define all(v) v.begin(),v.end()
const ll M=4e5+10;
const ll inf=2e18;
const ll lg=30;
ll go[lg][M],sm[lg][M],awin[M],difficulty;
void init(int n,vector<int>s,vector<int>p,vector<int>w,vector<int>l) {
	l.pb(n);
	p.pb(0);
	awin[n]=0;
	for(int i=n-1;i>=0;i--){
		awin[i]=awin[w[i]]+s[0];
	}
	difficulty=s[0];
	for(int i=0;i<=n;i++)
	go[0][i]=l[i],sm[0][i]=p[i];
	for(int bit=1;bit<lg;bit++){
		for(int i=0;i<=n;i++){
		sm[bit][i]=sm[bit-1][i]+sm[bit-1][go[bit-1][i]];
		go[bit][i]=go[bit-1][go[bit-1][i]];
		}
	}
}

long long simulate(int x, int z){
	for(int bit=lg-1;bit>=0;bit--){
		if(z+sm[bit][x]<difficulty)
		z+=sm[bit][x],x=go[bit][x];
	}
	if(z<difficulty)
	z+=sm[0][x],x=go[0][x];
	z+=awin[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...