Submission #815364

# Submission time Handle Problem Language Result Execution time Memory
815364 2023-08-08T14:27:20 Z eltu0815 Dungeons Game (IOI21_dungeons) C++17
100 / 100
2772 ms 696660 KB
#include "dungeons.h"
#include <bits/stdc++.h>
using namespace std;
 
typedef long long ll;
 
int N;
int pos[8][400001][18], mn[8][400001][18], sum[8][400001][18];
ll dp[400001];
 
 vector<int> s, p, w, l;
void init(int n, std::vector<int> S, std::vector<int> P, std::vector<int> W, std::vector<int> L) {
    N = n; s = S, w = W;
    for(int j = 0; j < 8; ++j) {
        for(int i = 0; i < N; ++i) {
            pos[j][i][0] = (1 << 3 * j) <= S[i] ? L[i] : W[i];
            sum[j][i][0] = (1 << 3 * j) <= S[i] ? P[i] : S[i];
            mn[j][i][0] = (1 << 3 * j) <= S[i] ? S[i] : (int)(1e9);
        }
        pos[j][N][0] = N, sum[j][N][0] = mn[j][N][0] = (int)(1e9);
    }
    for(int k = 0; k < 8; ++k) for(int j = 1; j <= 17; ++j) {
        for(int i = 0; i <= N; ++i) {
            pos[k][i][j] = pos[k][pos[k][i][j - 1]][j - 1];
            sum[k][i][j] = sum[k][pos[k][i][j - 1]][j - 1] + sum[k][i][j - 1];
            mn[k][i][j] = min(mn[k][i][j - 1], mn[k][pos[k][i][j - 1]][j - 1] - sum[k][i][j - 1]);
            
            sum[k][i][j] = min(sum[k][i][j], (int)(1e9));
            mn[k][i][j] = max(mn[k][i][j], 0);
        }
    }
    
    for(int i = n - 1; i >= 0; --i) dp[i] = dp[W[i]] + S[i];
	return;
}
 
long long simulate(int x, int z) {
    ll ans = z;
    for(int k = 0; k < 8; ++k) {
        while(ans < (1 << 3 * k + 3)) {
            for(int j = 17; j >= 0; --j) {
                if(pos[k][x][j] != N && sum[k][x][j] + ans < (1 << 3 * k + 3) && mn[k][x][j] > ans) {
                    ans += sum[k][x][j], x = pos[k][x][j];
                }
            }
            if(s[x] <= ans) ans += s[x], x = w[x];
            else if(ans < (1 << 3 * k + 3)) ans += sum[k][x][0], x = pos[k][x][0];
            if(x == N) return ans;
        }
    }
	return ans + dp[x];
}

Compilation message

dungeons.cpp: In function 'long long int simulate(int, int)':
dungeons.cpp:40:33: warning: suggest parentheses around '+' inside '<<' [-Wparentheses]
   40 |         while(ans < (1 << 3 * k + 3)) {
      |                           ~~~~~~^~~
dungeons.cpp:42:74: warning: suggest parentheses around '+' inside '<<' [-Wparentheses]
   42 |                 if(pos[k][x][j] != N && sum[k][x][j] + ans < (1 << 3 * k + 3) && mn[k][x][j] > ans) {
      |                                                                    ~~~~~~^~~
dungeons.cpp:47:39: warning: suggest parentheses around '+' inside '<<' [-Wparentheses]
   47 |             else if(ans < (1 << 3 * k + 3)) ans += sum[k][x][0], x = pos[k][x][0];
      |                                 ~~~~~~^~~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 468 KB Output is correct
2 Correct 1 ms 468 KB Output is correct
3 Correct 4 ms 3924 KB Output is correct
4 Correct 107 ms 87636 KB Output is correct
5 Correct 3 ms 3924 KB Output is correct
6 Correct 105 ms 87548 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2260 KB Output is correct
2 Correct 1123 ms 696508 KB Output is correct
3 Correct 1108 ms 696528 KB Output is correct
4 Correct 1132 ms 696532 KB Output is correct
5 Correct 1180 ms 696528 KB Output is correct
6 Correct 1379 ms 696468 KB Output is correct
7 Correct 1325 ms 696404 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 2236 KB Output is correct
2 Correct 142 ms 88292 KB Output is correct
3 Correct 115 ms 88480 KB Output is correct
4 Correct 114 ms 88292 KB Output is correct
5 Correct 111 ms 88284 KB Output is correct
6 Correct 175 ms 88268 KB Output is correct
7 Correct 251 ms 88180 KB Output is correct
8 Correct 205 ms 88228 KB Output is correct
9 Correct 118 ms 88324 KB Output is correct
10 Correct 205 ms 88396 KB Output is correct
11 Correct 271 ms 88284 KB Output is correct
12 Correct 2573 ms 88352 KB Output is correct
13 Correct 2262 ms 88420 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 2236 KB Output is correct
2 Correct 142 ms 88292 KB Output is correct
3 Correct 115 ms 88480 KB Output is correct
4 Correct 114 ms 88292 KB Output is correct
5 Correct 111 ms 88284 KB Output is correct
6 Correct 175 ms 88268 KB Output is correct
7 Correct 251 ms 88180 KB Output is correct
8 Correct 205 ms 88228 KB Output is correct
9 Correct 118 ms 88324 KB Output is correct
10 Correct 205 ms 88396 KB Output is correct
11 Correct 271 ms 88284 KB Output is correct
12 Correct 2573 ms 88352 KB Output is correct
13 Correct 2262 ms 88420 KB Output is correct
14 Correct 2 ms 2260 KB Output is correct
15 Correct 130 ms 88420 KB Output is correct
16 Correct 150 ms 88420 KB Output is correct
17 Correct 143 ms 88304 KB Output is correct
18 Correct 140 ms 88240 KB Output is correct
19 Correct 189 ms 88364 KB Output is correct
20 Correct 180 ms 88260 KB Output is correct
21 Correct 206 ms 88216 KB Output is correct
22 Correct 234 ms 88296 KB Output is correct
23 Correct 423 ms 88380 KB Output is correct
24 Correct 574 ms 88376 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 2236 KB Output is correct
2 Correct 142 ms 88292 KB Output is correct
3 Correct 115 ms 88480 KB Output is correct
4 Correct 114 ms 88292 KB Output is correct
5 Correct 111 ms 88284 KB Output is correct
6 Correct 175 ms 88268 KB Output is correct
7 Correct 251 ms 88180 KB Output is correct
8 Correct 205 ms 88228 KB Output is correct
9 Correct 118 ms 88324 KB Output is correct
10 Correct 205 ms 88396 KB Output is correct
11 Correct 271 ms 88284 KB Output is correct
12 Correct 2573 ms 88352 KB Output is correct
13 Correct 2262 ms 88420 KB Output is correct
14 Correct 2 ms 2260 KB Output is correct
15 Correct 130 ms 88420 KB Output is correct
16 Correct 150 ms 88420 KB Output is correct
17 Correct 143 ms 88304 KB Output is correct
18 Correct 140 ms 88240 KB Output is correct
19 Correct 189 ms 88364 KB Output is correct
20 Correct 180 ms 88260 KB Output is correct
21 Correct 206 ms 88216 KB Output is correct
22 Correct 234 ms 88296 KB Output is correct
23 Correct 423 ms 88380 KB Output is correct
24 Correct 574 ms 88376 KB Output is correct
25 Correct 111 ms 87656 KB Output is correct
26 Correct 145 ms 88416 KB Output is correct
27 Correct 129 ms 88268 KB Output is correct
28 Correct 123 ms 88288 KB Output is correct
29 Correct 153 ms 88416 KB Output is correct
30 Correct 198 ms 88420 KB Output is correct
31 Correct 231 ms 88292 KB Output is correct
32 Correct 320 ms 88292 KB Output is correct
33 Correct 273 ms 88288 KB Output is correct
34 Correct 487 ms 88184 KB Output is correct
35 Correct 309 ms 88392 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2260 KB Output is correct
2 Correct 1123 ms 696508 KB Output is correct
3 Correct 1108 ms 696528 KB Output is correct
4 Correct 1132 ms 696532 KB Output is correct
5 Correct 1180 ms 696528 KB Output is correct
6 Correct 1379 ms 696468 KB Output is correct
7 Correct 1325 ms 696404 KB Output is correct
8 Correct 3 ms 2236 KB Output is correct
9 Correct 142 ms 88292 KB Output is correct
10 Correct 115 ms 88480 KB Output is correct
11 Correct 114 ms 88292 KB Output is correct
12 Correct 111 ms 88284 KB Output is correct
13 Correct 175 ms 88268 KB Output is correct
14 Correct 251 ms 88180 KB Output is correct
15 Correct 205 ms 88228 KB Output is correct
16 Correct 118 ms 88324 KB Output is correct
17 Correct 205 ms 88396 KB Output is correct
18 Correct 271 ms 88284 KB Output is correct
19 Correct 2573 ms 88352 KB Output is correct
20 Correct 2262 ms 88420 KB Output is correct
21 Correct 2 ms 2260 KB Output is correct
22 Correct 130 ms 88420 KB Output is correct
23 Correct 150 ms 88420 KB Output is correct
24 Correct 143 ms 88304 KB Output is correct
25 Correct 140 ms 88240 KB Output is correct
26 Correct 189 ms 88364 KB Output is correct
27 Correct 180 ms 88260 KB Output is correct
28 Correct 206 ms 88216 KB Output is correct
29 Correct 234 ms 88296 KB Output is correct
30 Correct 423 ms 88380 KB Output is correct
31 Correct 574 ms 88376 KB Output is correct
32 Correct 111 ms 87656 KB Output is correct
33 Correct 145 ms 88416 KB Output is correct
34 Correct 129 ms 88268 KB Output is correct
35 Correct 123 ms 88288 KB Output is correct
36 Correct 153 ms 88416 KB Output is correct
37 Correct 198 ms 88420 KB Output is correct
38 Correct 231 ms 88292 KB Output is correct
39 Correct 320 ms 88292 KB Output is correct
40 Correct 273 ms 88288 KB Output is correct
41 Correct 487 ms 88184 KB Output is correct
42 Correct 309 ms 88392 KB Output is correct
43 Correct 1 ms 436 KB Output is correct
44 Correct 3 ms 2240 KB Output is correct
45 Correct 1755 ms 696532 KB Output is correct
46 Correct 1259 ms 696536 KB Output is correct
47 Correct 1301 ms 696536 KB Output is correct
48 Correct 1217 ms 696536 KB Output is correct
49 Correct 1907 ms 696660 KB Output is correct
50 Correct 1179 ms 696192 KB Output is correct
51 Correct 1175 ms 696192 KB Output is correct
52 Correct 1271 ms 696144 KB Output is correct
53 Correct 2619 ms 696148 KB Output is correct
54 Correct 1656 ms 696144 KB Output is correct
55 Correct 2177 ms 696148 KB Output is correct
56 Correct 2304 ms 696148 KB Output is correct
57 Correct 2618 ms 696148 KB Output is correct
58 Correct 2296 ms 696128 KB Output is correct
59 Correct 2441 ms 696152 KB Output is correct
60 Correct 2772 ms 696152 KB Output is correct
61 Correct 2649 ms 696152 KB Output is correct