#include "dungeons.h"
#include <cassert>
#include <cstring>
#include <algorithm>
#include <vector>
using ll = long long;
const int MN = 4e5+10;
const int W = 8; // worlds
const int MUL = 11; // multiplier
const int ML = 25; // 2^25 ~ 3e7
const int INF = 0x3f3f3f3f;
const ll INFL = 0x3f3f3f3f3f3f3f3f;
int N;
std::vector<int> s, p, w, l;
int jmp[W][MN][ML];
ll delta[W][MN][ML], max[W][MN][ML];
void init(int _N, std::vector<int> _s, std::vector<int> _p, std::vector<int> _w, std::vector<int> _l) {
N=_N;
s=_s, p=_p, w=_w, l=_l;
memset(jmp, -1, sizeof jmp);
int b=1;
for(int v=0;v<W;++v)
{
for(int i=0;i<N;++i)
if(s[i] < b)
{
jmp[v][i][0]=w[i];
delta[v][i][0]=s[i];
max[v][i][0]=INFL;
}
else
{
jmp[v][i][0]=l[i];
delta[v][i][0]=p[i];
max[v][i][0]=s[i]; // >= max -> unexpected; < max -> go ahead
}
for(int j=0;j+1<ML;++j)
for(int i=0;i<N;++i)
if(jmp[v][i][j]!=-1 && jmp[v][jmp[v][i][j]][j]!=-1)
{
int x = jmp[v][i][j];
jmp[v][i][j+1]=jmp[v][x][j];
delta[v][i][j+1]=delta[v][i][j]+delta[v][x][j];
max[v][i][j+1]=std::min(max[v][i][j], max[v][x][j]-delta[v][i][j]);
}
b *= MUL;
}
}
void step(int &n, ll &z)
{
if(n==N) return;
if(z<s[n])
z+=p[n], n=l[n];
else
z+=s[n], n=w[n];
}
void jump(int v, int cut, int &n, ll &z)
{
for(int i=ML-1;i>=0;--i)
if(jmp[v][n][i] != -1 && z<max[v][n][i] && (cut == -1 || z+delta[v][n][i]<cut)) // while isn't necessary here
z+=delta[v][n][i], n=jmp[v][n][i];
}
long long simulate(int n, int _z) {
ll z=_z;
int b=1;
for(int i=0;i+1<W;++i)
{
b *= MUL;
while(z<b)
{
jump(i, b, n, z);
step(n, z);
if(n==N) return z;
}
}
jump(W-1, -1, n, z);
assert(n==N);
return z;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
178 ms |
313412 KB |
Output is correct |
2 |
Correct |
166 ms |
313596 KB |
Output is correct |
3 |
Correct |
179 ms |
319780 KB |
Output is correct |
4 |
Correct |
536 ms |
473368 KB |
Output is correct |
5 |
Correct |
181 ms |
319868 KB |
Output is correct |
6 |
Correct |
468 ms |
473340 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
174 ms |
316740 KB |
Output is correct |
2 |
Correct |
4164 ms |
1588604 KB |
Output is correct |
3 |
Correct |
3770 ms |
1590876 KB |
Output is correct |
4 |
Correct |
3626 ms |
1591228 KB |
Output is correct |
5 |
Correct |
3367 ms |
1591400 KB |
Output is correct |
6 |
Correct |
4682 ms |
1590108 KB |
Output is correct |
7 |
Correct |
3955 ms |
1588924 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
182 ms |
316740 KB |
Output is correct |
2 |
Correct |
677 ms |
474740 KB |
Output is correct |
3 |
Correct |
651 ms |
474684 KB |
Output is correct |
4 |
Correct |
536 ms |
474344 KB |
Output is correct |
5 |
Correct |
612 ms |
474260 KB |
Output is correct |
6 |
Correct |
840 ms |
474488 KB |
Output is correct |
7 |
Correct |
731 ms |
474608 KB |
Output is correct |
8 |
Correct |
718 ms |
474216 KB |
Output is correct |
9 |
Correct |
473 ms |
474240 KB |
Output is correct |
10 |
Correct |
631 ms |
474096 KB |
Output is correct |
11 |
Correct |
882 ms |
474472 KB |
Output is correct |
12 |
Correct |
1284 ms |
474596 KB |
Output is correct |
13 |
Correct |
1112 ms |
474608 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
182 ms |
316740 KB |
Output is correct |
2 |
Correct |
677 ms |
474740 KB |
Output is correct |
3 |
Correct |
651 ms |
474684 KB |
Output is correct |
4 |
Correct |
536 ms |
474344 KB |
Output is correct |
5 |
Correct |
612 ms |
474260 KB |
Output is correct |
6 |
Correct |
840 ms |
474488 KB |
Output is correct |
7 |
Correct |
731 ms |
474608 KB |
Output is correct |
8 |
Correct |
718 ms |
474216 KB |
Output is correct |
9 |
Correct |
473 ms |
474240 KB |
Output is correct |
10 |
Correct |
631 ms |
474096 KB |
Output is correct |
11 |
Correct |
882 ms |
474472 KB |
Output is correct |
12 |
Correct |
1284 ms |
474596 KB |
Output is correct |
13 |
Correct |
1112 ms |
474608 KB |
Output is correct |
14 |
Correct |
184 ms |
316632 KB |
Output is correct |
15 |
Correct |
599 ms |
474592 KB |
Output is correct |
16 |
Correct |
627 ms |
474684 KB |
Output is correct |
17 |
Correct |
675 ms |
474336 KB |
Output is correct |
18 |
Correct |
730 ms |
474412 KB |
Output is correct |
19 |
Correct |
788 ms |
474692 KB |
Output is correct |
20 |
Correct |
751 ms |
474268 KB |
Output is correct |
21 |
Correct |
799 ms |
474332 KB |
Output is correct |
22 |
Correct |
801 ms |
474448 KB |
Output is correct |
23 |
Correct |
892 ms |
474608 KB |
Output is correct |
24 |
Correct |
1161 ms |
474608 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
182 ms |
316740 KB |
Output is correct |
2 |
Correct |
677 ms |
474740 KB |
Output is correct |
3 |
Correct |
651 ms |
474684 KB |
Output is correct |
4 |
Correct |
536 ms |
474344 KB |
Output is correct |
5 |
Correct |
612 ms |
474260 KB |
Output is correct |
6 |
Correct |
840 ms |
474488 KB |
Output is correct |
7 |
Correct |
731 ms |
474608 KB |
Output is correct |
8 |
Correct |
718 ms |
474216 KB |
Output is correct |
9 |
Correct |
473 ms |
474240 KB |
Output is correct |
10 |
Correct |
631 ms |
474096 KB |
Output is correct |
11 |
Correct |
882 ms |
474472 KB |
Output is correct |
12 |
Correct |
1284 ms |
474596 KB |
Output is correct |
13 |
Correct |
1112 ms |
474608 KB |
Output is correct |
14 |
Correct |
184 ms |
316632 KB |
Output is correct |
15 |
Correct |
599 ms |
474592 KB |
Output is correct |
16 |
Correct |
627 ms |
474684 KB |
Output is correct |
17 |
Correct |
675 ms |
474336 KB |
Output is correct |
18 |
Correct |
730 ms |
474412 KB |
Output is correct |
19 |
Correct |
788 ms |
474692 KB |
Output is correct |
20 |
Correct |
751 ms |
474268 KB |
Output is correct |
21 |
Correct |
799 ms |
474332 KB |
Output is correct |
22 |
Correct |
801 ms |
474448 KB |
Output is correct |
23 |
Correct |
892 ms |
474608 KB |
Output is correct |
24 |
Correct |
1161 ms |
474608 KB |
Output is correct |
25 |
Correct |
631 ms |
473884 KB |
Output is correct |
26 |
Correct |
715 ms |
474824 KB |
Output is correct |
27 |
Correct |
576 ms |
474292 KB |
Output is correct |
28 |
Correct |
659 ms |
474344 KB |
Output is correct |
29 |
Correct |
742 ms |
474740 KB |
Output is correct |
30 |
Correct |
890 ms |
474612 KB |
Output is correct |
31 |
Correct |
925 ms |
474184 KB |
Output is correct |
32 |
Correct |
1027 ms |
474340 KB |
Output is correct |
33 |
Correct |
1234 ms |
474320 KB |
Output is correct |
34 |
Correct |
1986 ms |
474180 KB |
Output is correct |
35 |
Correct |
1036 ms |
474600 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
174 ms |
316740 KB |
Output is correct |
2 |
Correct |
4164 ms |
1588604 KB |
Output is correct |
3 |
Correct |
3770 ms |
1590876 KB |
Output is correct |
4 |
Correct |
3626 ms |
1591228 KB |
Output is correct |
5 |
Correct |
3367 ms |
1591400 KB |
Output is correct |
6 |
Correct |
4682 ms |
1590108 KB |
Output is correct |
7 |
Correct |
3955 ms |
1588924 KB |
Output is correct |
8 |
Correct |
182 ms |
316740 KB |
Output is correct |
9 |
Correct |
677 ms |
474740 KB |
Output is correct |
10 |
Correct |
651 ms |
474684 KB |
Output is correct |
11 |
Correct |
536 ms |
474344 KB |
Output is correct |
12 |
Correct |
612 ms |
474260 KB |
Output is correct |
13 |
Correct |
840 ms |
474488 KB |
Output is correct |
14 |
Correct |
731 ms |
474608 KB |
Output is correct |
15 |
Correct |
718 ms |
474216 KB |
Output is correct |
16 |
Correct |
473 ms |
474240 KB |
Output is correct |
17 |
Correct |
631 ms |
474096 KB |
Output is correct |
18 |
Correct |
882 ms |
474472 KB |
Output is correct |
19 |
Correct |
1284 ms |
474596 KB |
Output is correct |
20 |
Correct |
1112 ms |
474608 KB |
Output is correct |
21 |
Correct |
184 ms |
316632 KB |
Output is correct |
22 |
Correct |
599 ms |
474592 KB |
Output is correct |
23 |
Correct |
627 ms |
474684 KB |
Output is correct |
24 |
Correct |
675 ms |
474336 KB |
Output is correct |
25 |
Correct |
730 ms |
474412 KB |
Output is correct |
26 |
Correct |
788 ms |
474692 KB |
Output is correct |
27 |
Correct |
751 ms |
474268 KB |
Output is correct |
28 |
Correct |
799 ms |
474332 KB |
Output is correct |
29 |
Correct |
801 ms |
474448 KB |
Output is correct |
30 |
Correct |
892 ms |
474608 KB |
Output is correct |
31 |
Correct |
1161 ms |
474608 KB |
Output is correct |
32 |
Correct |
631 ms |
473884 KB |
Output is correct |
33 |
Correct |
715 ms |
474824 KB |
Output is correct |
34 |
Correct |
576 ms |
474292 KB |
Output is correct |
35 |
Correct |
659 ms |
474344 KB |
Output is correct |
36 |
Correct |
742 ms |
474740 KB |
Output is correct |
37 |
Correct |
890 ms |
474612 KB |
Output is correct |
38 |
Correct |
925 ms |
474184 KB |
Output is correct |
39 |
Correct |
1027 ms |
474340 KB |
Output is correct |
40 |
Correct |
1234 ms |
474320 KB |
Output is correct |
41 |
Correct |
1986 ms |
474180 KB |
Output is correct |
42 |
Correct |
1036 ms |
474600 KB |
Output is correct |
43 |
Correct |
182 ms |
313648 KB |
Output is correct |
44 |
Correct |
167 ms |
316712 KB |
Output is correct |
45 |
Correct |
4333 ms |
1590268 KB |
Output is correct |
46 |
Correct |
3542 ms |
1589532 KB |
Output is correct |
47 |
Correct |
3632 ms |
1589648 KB |
Output is correct |
48 |
Correct |
3889 ms |
1589688 KB |
Output is correct |
49 |
Correct |
4526 ms |
1589524 KB |
Output is correct |
50 |
Correct |
4270 ms |
1589392 KB |
Output is correct |
51 |
Correct |
3692 ms |
1589156 KB |
Output is correct |
52 |
Correct |
4481 ms |
1588300 KB |
Output is correct |
53 |
Correct |
5845 ms |
1588368 KB |
Output is correct |
54 |
Correct |
4860 ms |
1588336 KB |
Output is correct |
55 |
Correct |
5539 ms |
1587652 KB |
Output is correct |
56 |
Correct |
5432 ms |
1587568 KB |
Output is correct |
57 |
Correct |
5419 ms |
1587096 KB |
Output is correct |
58 |
Correct |
5337 ms |
1586564 KB |
Output is correct |
59 |
Correct |
5322 ms |
1586292 KB |
Output is correct |
60 |
Correct |
6088 ms |
1585508 KB |
Output is correct |
61 |
Correct |
6324 ms |
1592020 KB |
Output is correct |