Submission #1261300

#TimeUsernameProblemLanguageResultExecution timeMemory
1261300biankDungeons Game (IOI21_dungeons)C++20
0 / 100
16 ms30536 KiB
#include "dungeons.h"
#include <bits/stdc++.h>
 
#define forsn(i, s, n) for (int i = int(s); i < int(n); i++)
#define forn(i, n) forsn(i, 0, n)
#define dforsn(i, s, n) for (int i = int(n) - 1; i >= int(s); i--)
#define dforn(i, n) dforsn(i, 0, n)
 
#define sz(x) int(x.size())
#define all(x) begin(x), end(x)
 
#define pb push_back
#define eb emplace_back
 
#define fst first
#define snd second
 
using namespace std;
 
using vi = vector<int>;
using ii = pair<int, int>;
using ll = long long;

const int MAX_N = 50005;
const int MAX_K = 30;
const ll INF = 1e18;

ll prize[MAX_K][MAX_K][MAX_N];
ll minPower[MAX_K][MAX_K][MAX_N];
int nxt[MAX_K][MAX_K][MAX_N];

void init(int n, vi s, vi p, vi w, vi l) {
    s.pb(0), w.pb(n);
    n++;
    forn(k, MAX_K) {
        forn(i, n) {
            if (s[i] < 1 << k) {
                nxt[k][0][i] = w[i];
                prize[k][0][i] = s[i];
                minPower[k][0][i] = INF;
            } else {
                nxt[k][0][i] = l[i];
                prize[k][0][i] = p[i];
                minPower[k][0][i] = s[i];
            }
        }
        forn(b, MAX_K - 1) forn(i, n) {
            int j = nxt[k][b][i];
            nxt[k][b + 1][i] = nxt[k][b][j];
            prize[k][b + 1][i] = prize[k][b][i] + prize[k][b][j];
            minPower[k][b + 1][i] = min(minPower[k][b][i], minPower[k][b][j] - prize[k][b][i]);
        }
    }
}

ll simulate(int x, int z) {
    ll curr = z;
    forn(k, MAX_K) dforn(i, MAX_K) {
        if (curr >= (1 << k) - 1 && minPower[k][i][x] > curr) {
            curr += prize[k][i][x];
            x = nxt[k][i][x];
        }
    }
    return curr;
}

#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...