Submission #1261312

#TimeUsernameProblemLanguageResultExecution timeMemory
1261312biank던전 (IOI21_dungeons)C++20
100 / 100
2468 ms1526104 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 = 4e5 + 9; const int MAX_K = 8; const int MAX_B = 24; const ll INF = 1e18; ll prize[MAX_K][MAX_B][MAX_N]; ll minPower[MAX_K][MAX_B][MAX_N]; int nxt[MAX_K][MAX_B][MAX_N]; ll dp[MAX_N]; vi s, p, w, l; int n; void init(int _n, vi _s, vi _p, vi _w, vi _l) { n = _n, s = _s, p = _p, w = _w, l = _l; s.pb(0), w.pb(n), p.pb(0), l.pb(n); n++; dp[n] = 0; dforn(i, n) dp[i] = dp[w[i]] + s[i]; forn(k, MAX_K) { forn(i, n) { if (s[i] < 1 << (3 * 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_B - 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) forn(t, 7) { dforn(i, MAX_B) { if (curr >= (1 << (3 * k)) - 1 && minPower[k][i][x] > curr) { curr += prize[k][i][x]; x = nxt[k][i][x]; } } if (s[x] <= curr) { curr += s[x], x = w[x]; } else { curr += p[x], x = l[x]; } } return curr + dp[x]; }
#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...