Submission #1209112

#TimeUsernameProblemLanguageResultExecution timeMemory
1209112badge881Dungeons Game (IOI21_dungeons)C++20
37 / 100
7092 ms470880 KiB
#include "dungeons.h"
#include <bits/stdc++.h>
using namespace std;

#define ll long long

int n;
vector<int> p, l;
vector<vector<vector<ll>>> j;

void init(int n, vector<int> s, vector<int> p, vector<int> w, vector<int> l)
{
    ::n = n;
    ::p = p;
    ::l = l;
    j.assign(n + 1, vector<vector<ll>>(20, vector<ll>(3)));
    j[n][0] = {n, 0, 0};
    for (int i = 0; i < n; i++)
        j[i][0] = {w[i], s[i], s[i]};
    for (int k = 1; k < 20; k++)
    {
        for (int i = 0; i <= n; i++)
            j[i][k] = {j[j[i][k - 1][0]][k - 1][0], j[i][k - 1][1] + j[j[i][k - 1][0]][k - 1][1], max(j[i][k - 1][2], j[j[i][k - 1][0]][k - 1][2] - j[i][k - 1][1])};
    }
    return;
}

ll simulate(int x, int iz)
{
    ll z = iz;
    while (x != n)
    {
        for (int k = 19; k >= 0; k--)
        {
            if (z >= j[x][k][2])
            {
                z += j[x][k][1];
                x = j[x][k][0];
            }
        }
        if (x != n)
        {
            z += p[x];
            x = l[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...