Submission #439117

#TimeUsernameProblemLanguageResultExecution timeMemory
439117StickfishDungeons Game (IOI21_dungeons)C++17
0 / 100
7063 ms44492 KiB
#include "dungeons.h" #include <vector> #include <cassert> using namespace std; using ll = long long; const int MAXN = 4e5 + 123; const int LOGVL = 26; const ll INF = 1e9; int n; int edg[MAXN][2]; int p[MAXN][2]; pair<int, ll> cpredg0[LOGVL][MAXN]; pair<int, ll> cpredg1[LOGVL][MAXN]; int rpw2(int x){ int lb = 0, ub = LOGVL; while(ub - lb > 1){ int mb = (lb + ub) / 2; if((1 << mb) <= x){ lb = mb; } else { ub = mb; } } return lb; } void get_next(ll& i, ll& vl){ if(i >= n) return; if(vl >= p[i][0]){ vl += p[i][0]; i = edg[i][0]; } else { vl += p[i][1]; i = edg[i][1]; } } void init(int n0, vector<int> sv, vector<int> pv, vector<int> wv, vector<int> lv) { n = n0; for(int i = 0; i < n; ++i){ edg[i][0] = wv[i]; edg[i][1] = lv[i]; p[i][0] = sv[i]; p[i][1] = pv[i]; } for(int lyr = 0; lyr < LOGVL; ++lyr){ for(int i = 0; i < n; ++i){ ll x = i, z = (1 << lyr); cpredg1[lyr][i] = cpredg0[lyr][i] = {x, 0}; while(x < n && z >= p[x][0]){ cpredg0[lyr][i] = {x, z - (1 << lyr)}; get_next(x, z); } x = i, z = (1 << lyr); while(x < n && z < p[x][0]){ cpredg1[lyr][i] = {x, z - (1 << lyr)}; get_next(x, z); } } } //for(int lyr = 1; lyr < LOGVL; ++lyr){ //for(int i = 0; i < n; ++i){ //ll x = i, z = (1 << lyr); //while(x ==z >= p[x][0]){ //cpredg0[lyr][i] = {x, z - (1 << lyr)}; //if(x >= n) //break; //} //} //} return; } ll simulate(int x, int z){ ll ans = z; ll i = x; while(i < n){ ll lgans = rpw2(ans); ans += cpredg0[lgans][i].second; i = cpredg0[lgans][i].first; if(ans < 1e7){ ans += cpredg1[lgans + 1][i].second; i = cpredg1[lgans + 1][i].first; } get_next(i, ans); } return ans; }
#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...