Submission #438984

#TimeUsernameProblemLanguageResultExecution timeMemory
438984jlallas384Dungeons Game (IOI21_dungeons)C++17
11 / 100
7127 ms430684 KiB
#include <bits/stdc++.h>
#include "dungeons.h"
using namespace std;
using ll = long long;
vector<vector<pair<int,ll>>> blw,bll;
int n;
vector<vector<pair<int,ll>>> build(vector<int> nxt,vector<int> add){
    vector<vector<pair<int,ll>>> bl(n + 1,vector<pair<int,ll>>(30));
    for(int i = 0; i < n; i++){
        bl[i][0] = {nxt[i],add[i]};
    }
    bl[n][0].first = n;
    for(int j = 1; j < 30; j++){
        for(int i = 0; i <= n; i++){
            bl[i][j].first = bl[bl[i][j - 1].first][j - 1].first;
            bl[i][j].second = bl[i][j - 1].second + bl[bl[i][j - 1].first][j - 1].second;
        }
    }
    return bl;
}

void init(int _n, vector<int> s, vector<int> p, vector<int> w, vector<int> l){
    n = _n;
    blw = build(w,s);
    bll = build(l,p);
}

long long simulate(int x, int z){
    ll res = z;
    // for(int i = 29; i >= 0; i--){
    //     if(res + bll[x][i].second < blw[0][0].second){
    //         res += bll[x][i].second;
    //         x = bll[x][i].first;
    //     }
    // }
    // if(res < blw[0][0].second){
    //     res += bll[x][0].second;
    //     x = bll[x][0].first;
    // }
    // for(int i = 29; i >= 0; i--){
    //     if(blw[x][i].first != n){
    //         res += blw[x][i].second;
    //         x = blw[x][i].first;
    //     }
    // }
    // return res + blw[x][0].second;
    while(x != n){
        if(res < blw[x][0].second){
            res += bll[x][0].second;
            x = bll[x][0].first;
        }else{
            res += blw[x][0].second;
            x = blw[x][0].first;
        }
    }
    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...