Submission #1334954

#TimeUsernameProblemLanguageResultExecution timeMemory
1334954activedeltorre던전 (IOI21_dungeons)C++20
0 / 100
33 ms18888 KiB
#include "dungeons.h"
#include <iostream>
#include <vector>
#include <cassert>
#include <cstdio>
int hp[400005];
int addw[400005];
int addl[400005];
int muchw[400005];
int muchl[400005];
int dist[400005];
int bl[26][400005];
long long costbl[26][400005];
int nmax;
void init(int n, std::vector<int> s, std::vector<int> p, std::vector<int> w, std::vector<int> l) {

    nmax=n;
    for(int i=1;i<=n;i++)
    {
        hp[i]=s[i-1];
        addw[i]=s[i-1];
        addl[i]=p[i-1];
        muchw[i]=w[i-1]+1;
        muchl[i]=l[i-1]+1;
    }
    dist[n+1]=0;
    for(int i=n;i>=1;i--)
    {
        dist[i]=dist[muchw[i]]+1;
    }
    addl[n+1]=0;
    bl[0][n+1]=n+1;
    for(int i=1;i<=n+1;i++)
    {
        costbl[0][i]=addl[i];
        bl[0][i]=muchl[i];
    }
    for(int i=1;i<=24;i++)
    {
        for(int j=1;j<=n+1;j++)
        {
            bl[i][j]=bl[i-1][bl[i-1][j]];
            costbl[i][j]=costbl[i-1][j]+costbl[i-1][bl[i-1][j]];
        }
    }
    return;
}

long long simulate(int x, int z) {
    long long z2=z;
    x++;
    if(z2>=hp[nmax])
    {
        return z2+dist[x]*hp[nmax];
    }
    for(int i=24;i>=0;i--)
    {
        int nxt=bl[i][x];
        long long nxtval=costbl[i][x];
        if(z2+nxtval<hp[nmax])
        {
            z2=z2+costbl[i][x];
            x=bl[i][x];
        }
    }
    z2=z2+costbl[0][x];
    x=bl[0][x];
    return z2+dist[x]*hp[nmax];
}
#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...