Submission #1214407

#TimeUsernameProblemLanguageResultExecution timeMemory
1214407omsincoconutDungeons Game (IOI21_dungeons)C++17
0 / 100
3 ms5956 KiB
#include "dungeons.h"
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

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

const ll INF = 1e18;

const int MAXBIT = 30, MAXN = 4e5+5;
int dist;
vector<ll> ss;
int skip[7][MAXBIT][MAXN];
ll gain[7][MAXBIT][MAXN];

void init(int _n, vector<int> _s, vector<int> _p, vector<int> _w, vector<int> _l) {
    n = _n; s = _s; p = _p; w = _w; l = _l;

    s.push_back(0); p.push_back(0); w.push_back(n); l.push_back(n);

    for (ll i : s) ss.push_back(i);
    ss.push_back(0);
    ss.push_back(INF);
    sort(ss.begin(), ss.end());
    ss.resize(unique(ss.begin(), ss.end()) - ss.begin());
    dist = ss.size();

    for (int d = 0; d < dist; d++) {
        for (int i = 0; i <= n; i++) {
            skip[d][0][i] = (ss[d] >= s[i] ? w[i] : l[i]);
            gain[d][0][i] = (ss[d] >= s[i] ? s[i] : p[i]);
        }

        for (int j = 0; j < MAXBIT-1; j++) {
            for (int i = 0; i <= n; i++) {
                int sk = skip[d][j][i];
                skip[d][j+1][i] = skip[d][j][sk];
                gain[d][j+1][i] = gain[d][j][i] + gain[d][j][sk];
            }
        }
    }

    for (ll i : ss) cout << i << " ";
    cout << "--\n";
}

long long simulate(int x, int _z) {
    ll z = _z;

    for (int d = 0; d < dist-1; d++) {
        for (int j = MAXBIT-1; j >= 0; j--) {
            if (z + gain[d][j][x] < ss[d+1] && skip[d][j][x] != n) {
                z += gain[d][j][x];
                x = skip[d][j][x];
            }
        }

        if (z >= s[x] && w[x] == n) return z + s[x];
        if (z < s[x] && l[x] == n) return z + p[x];

        if (z < ss[d+1] && skip[d][0][x] != n) {
            z += gain[d][0][x];
            x = skip[d][0][x];
        }

        if (z >= s[x] && w[x] == n) return z + s[x];
        if (z < s[x] && l[x] == n) return z + p[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...