# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
603932 | keta_tsimakuridze | Dungeons Game (IOI21_dungeons) | C++17 | 7037 ms | 171804 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "dungeons.h"
#include<bits/stdc++.h>
#define pii pair<long long, long long>
#define f first
#define s second
using namespace std;
#include <vector>
vector<int> s, p, w, l;
int n;
const long long inf = 1e18;
const int N =2e5;
long long nxt[N][33][6], add[N][33][6], d[N][2];
vector<int> val;
vector<pii> V[N][2];
void bfs(int t) {
for(int i = 0; i < n; i++) d[i][t] = inf;
queue<int> q;
q.push(n);
while(q.size()) {
int u = q.front();
q.pop();
for(int i = 0; i < V[u][t].size(); i++) {
d[V[u][t][i].f][t] = d[u][t] + V[u][t][i].s;
q.push(V[u][t][i].f);
}
}
}
void init(int N, std::vector<int> S, std::vector<int> P, std::vector<int> W, std::vector<int> L) {
s = S; p = P; w = W; l = L;
n = N;
for(int i = 0; i < n; i++) {
val.push_back(s[i]);
}
sort(val.begin(), val.end());
val.erase(unique(val.begin(), val.end()), val.end());
for(int i = 0; i < n; i++) nxt[i][0][0] = l[i], add[i][0][0] = p[i];
nxt[n][0][0] = n;
for(int i = 0; i < val.size(); i++) {
nxt[n][0][i + 1] = n;
for(int j = 0; j < n; j++) {
if(s[j] <= val[i]) {
nxt[j][0][i + 1] = w[j];
add[j][0][i + 1] = s[j];
} else nxt[j][0][i + 1] = l[j], add[j][0][i + 1] = p[j];
}
}
for(int i = 1; i <= 30; i++) {
for(int j = 0; j <= n; j++) {
for(int t = 0; t <= val.size(); t++)
nxt[j][i][t] = nxt[nxt[j][i - 1][t]][i - 1][t],
add[j][i][t] = add[j][i - 1][t] + add[nxt[j][i - 1][t]][i - 1][t];
}
}
for(int i = 0; i < n; i++) {
V[w[i]][0].push_back({i, s[i]});
}
bfs(0);
}
long long simulate(int x, int Z) {
long long ans2 = Z;
for(int k = 0; k < val.size(); k++) {
for(int i = 30; i >= 0; i--) {
if(add[x][i][k] + ans2 < val[k]) {
ans2 += add[x][i][k];
x = nxt[x][i][k];
}
}
if(ans2 < val[k]) {
ans2 += add[x][0][k];
x = nxt[x][0][k];
}
}
return ans2 + d[x][0];
}
Compilation message (stderr)
# | 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... |