Submission #1204758

#TimeUsernameProblemLanguageResultExecution timeMemory
1204758simona1230Dungeons Game (IOI21_dungeons)C++20
0 / 100
7094 ms832 KiB
#include "dungeons.h"
#include <bits/stdc++.h>
using namespace std;
const int maxn=5*1e4+5;
const int logg=30;

int n;
vector<int> s,p,w,l;

int maxx[maxn][32];
long long sum[maxn][32];
int ver[maxn][32];

void init(int N, std::vector<int> S, std::vector<int> P, std::vector<int> W, std::vector<int> L)
{
    n=N;
    s=S;
    p=P;
    w=W;
    l=L;

    for(int i=0;i<n;i++)
    {
        maxx[i][0]=s[i];
        sum[i][0]=s[i];
        ver[i][0]=w[i];
    }

    for(int j=1;j<=logg;j++)
    {
        for(int i=0;i<n;i++)
        {
            maxx[i][j]=max(maxx[i][j-1],maxx[ver[i][j-1]][j-1]);
            sum[i][j]=sum[i][j-1]+sum[ver[i][j-1]][j-1];
            if(1e18-sum[i][j-1]<sum[ver[i][j-1]][j-1])sum[i][j]=1e18;
            ver[i][j]=ver[ver[i][j-1]][j-1];
        }
    }

    return;
}

long long simulate(int x, int zz)
{
    long long z=zz;
    while(1)
    {
        for(int j=logg;j>=0;j--)
        {
            if(maxx[x][j]<=z)
            {
                z+=sum[x][j];
                x=ver[x][j];
                break;
            }
        }

        if(x==n)return z;

        if(z<s[x])
        {
            z+=p[x];
            x=l[x];
        }
        else
        {
            z+=s[x];
            x=w[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...