#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |