제출 #1261291

#제출 시각아이디문제언어결과실행 시간메모리
1261291biank던전 (IOI21_dungeons)C++20
0 / 100
2 ms3908 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 = 16; 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[j][b][i]); } } } ll simulate(int x, int z) { ll curr = z; forn(k, MAX_K) dforn(i, MAX_K) { if (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...