#include "dungeons.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ii pair<ll,ll>
#define fi first
#define se second
#define puf push_front
#define pof pop_front
#define pub push_back
#define pob pop_back
#define rep(x,s,e) for (auto x=s-(s>e);x!=e-(s>e);s<e?x++:x--)
#define all(x) (x).begin(),(x).end()
#define sz(x) (int) (x).size()
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int n;
ll win_s[50005];
ll lose_s[50005];
ll win_n[50005];
ll lose_n[50005];
struct edge{
int to;
ll sum;
ll mx; //we cant have more strength or we will overshoot
};
vector<ll> ds;
edge tkd[28][50005][28];
void init(int N, std::vector<int> s, std::vector<int> p, std::vector<int> w, std::vector<int> l) {
n=N;
rep(x,0,n) win_s[x]=s[x];
rep(x,0,n) lose_s[x]=p[x];
rep(x,0,n) win_n[x]=w[x];
rep(x,0,n) lose_n[x]=l[x];
for (int x=1;x<2e7;x<<=1) ds.pub(x); //start of bueket sizes
ds.pub(1e18);
//for (auto &it:ds) cout<<it<<" "; cout<<endl;
memset(tkd,-1,sizeof(tkd));
rep(i,0,sz(ds)-1){
rep(x,0,n){
if (win_s[x]<ds[i]){ //cfm will win
tkd[i][x][0]=edge({win_n[x],win_s[x],(ll)1e18});
}
else if (win_s[x]<ds[i+1]){ //by default, we lose, but if we win we must stop!
tkd[i][x][0]=edge({lose_n[x],lose_s[x],win_s[x]});
}
else{ //cfm will lose
tkd[i][x][0]=edge({lose_n[x],lose_s[x],(ll)1e18});
}
}
rep(y,0,27){
rep(x,0,n){
int temp=tkd[i][x][y].to;
if (temp==-1 || tkd[i][temp][y].to==-1) continue;
edge res=edge({
tkd[i][temp][y].to,
tkd[i][x][y].sum+tkd[i][temp][y].sum,
min(tkd[i][x][y].mx,tkd[i][temp][y].mx-tkd[i][x][y].sum)
});
tkd[i][x][y+1]=res;
}
}
}
}
long long simulate(int CURR, int S) {
ll curr=CURR,s=S;
rep(x,0,sz(ds)-1){
//when we traverse a edge we cannot overshoot over some guy whos in our bucket
//also sum must be contained in the bucket
rep(y,28,0){
if (tkd[x][curr][y].to!=-1 && s+tkd[x][curr][y].sum<ds[x+1] && s<tkd[x][curr][y].mx){
tie(curr,s)=ii(tkd[x][curr][y].to,s+tkd[x][curr][y].sum);
}
}
//cout<<"debug: "<<curr<<" "<<s<<endl;
if (curr==n) break;
//manually do extra one
if (win_s[curr]<=s){
s+=win_s[curr];
curr=win_n[curr];
}
else{
s+=lose_s[curr];
curr=lose_n[curr];
}
}
return s;
}
Compilation message
dungeons.cpp: In function 'void init(int, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
dungeons.cpp:55:35: warning: narrowing conversion of 'win_n[x]' from 'long long int' to 'int' [-Wnarrowing]
55 | tkd[i][x][0]=edge({win_n[x],win_s[x],(ll)1e18});
| ~~~~~~~^
dungeons.cpp:58:36: warning: narrowing conversion of 'lose_n[x]' from 'long long int' to 'int' [-Wnarrowing]
58 | tkd[i][x][0]=edge({lose_n[x],lose_s[x],win_s[x]});
| ~~~~~~~~^
dungeons.cpp:61:36: warning: narrowing conversion of 'lose_n[x]' from 'long long int' to 'int' [-Wnarrowing]
61 | tkd[i][x][0]=edge({lose_n[x],lose_s[x],(ll)1e18});
| ~~~~~~~~^
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
482 ms |
920936 KB |
Output is correct |
2 |
Correct |
448 ms |
920824 KB |
Output is correct |
3 |
Correct |
435 ms |
921040 KB |
Output is correct |
4 |
Correct |
1146 ms |
924064 KB |
Output is correct |
5 |
Correct |
471 ms |
921052 KB |
Output is correct |
6 |
Correct |
1127 ms |
924100 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
431 ms |
920976 KB |
Output is correct |
2 |
Runtime error |
220 ms |
14016 KB |
Execution killed with signal 11 |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
438 ms |
920992 KB |
Output is correct |
2 |
Correct |
1359 ms |
924852 KB |
Output is correct |
3 |
Correct |
1708 ms |
924844 KB |
Output is correct |
4 |
Correct |
1755 ms |
924880 KB |
Output is correct |
5 |
Correct |
1769 ms |
924856 KB |
Output is correct |
6 |
Correct |
1794 ms |
924852 KB |
Output is correct |
7 |
Correct |
1894 ms |
924860 KB |
Output is correct |
8 |
Correct |
2154 ms |
924868 KB |
Output is correct |
9 |
Correct |
1295 ms |
924844 KB |
Output is correct |
10 |
Correct |
2111 ms |
925036 KB |
Output is correct |
11 |
Correct |
2372 ms |
925048 KB |
Output is correct |
12 |
Correct |
4463 ms |
925044 KB |
Output is correct |
13 |
Correct |
3984 ms |
925084 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
438 ms |
920992 KB |
Output is correct |
2 |
Correct |
1359 ms |
924852 KB |
Output is correct |
3 |
Correct |
1708 ms |
924844 KB |
Output is correct |
4 |
Correct |
1755 ms |
924880 KB |
Output is correct |
5 |
Correct |
1769 ms |
924856 KB |
Output is correct |
6 |
Correct |
1794 ms |
924852 KB |
Output is correct |
7 |
Correct |
1894 ms |
924860 KB |
Output is correct |
8 |
Correct |
2154 ms |
924868 KB |
Output is correct |
9 |
Correct |
1295 ms |
924844 KB |
Output is correct |
10 |
Correct |
2111 ms |
925036 KB |
Output is correct |
11 |
Correct |
2372 ms |
925048 KB |
Output is correct |
12 |
Correct |
4463 ms |
925044 KB |
Output is correct |
13 |
Correct |
3984 ms |
925084 KB |
Output is correct |
14 |
Correct |
458 ms |
921040 KB |
Output is correct |
15 |
Correct |
1531 ms |
925000 KB |
Output is correct |
16 |
Correct |
1322 ms |
925044 KB |
Output is correct |
17 |
Correct |
1996 ms |
925044 KB |
Output is correct |
18 |
Correct |
1837 ms |
925152 KB |
Output is correct |
19 |
Correct |
1816 ms |
925040 KB |
Output is correct |
20 |
Correct |
1869 ms |
925048 KB |
Output is correct |
21 |
Correct |
1979 ms |
925044 KB |
Output is correct |
22 |
Correct |
1957 ms |
925100 KB |
Output is correct |
23 |
Correct |
2658 ms |
925048 KB |
Output is correct |
24 |
Correct |
3046 ms |
925048 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
438 ms |
920992 KB |
Output is correct |
2 |
Correct |
1359 ms |
924852 KB |
Output is correct |
3 |
Correct |
1708 ms |
924844 KB |
Output is correct |
4 |
Correct |
1755 ms |
924880 KB |
Output is correct |
5 |
Correct |
1769 ms |
924856 KB |
Output is correct |
6 |
Correct |
1794 ms |
924852 KB |
Output is correct |
7 |
Correct |
1894 ms |
924860 KB |
Output is correct |
8 |
Correct |
2154 ms |
924868 KB |
Output is correct |
9 |
Correct |
1295 ms |
924844 KB |
Output is correct |
10 |
Correct |
2111 ms |
925036 KB |
Output is correct |
11 |
Correct |
2372 ms |
925048 KB |
Output is correct |
12 |
Correct |
4463 ms |
925044 KB |
Output is correct |
13 |
Correct |
3984 ms |
925084 KB |
Output is correct |
14 |
Correct |
458 ms |
921040 KB |
Output is correct |
15 |
Correct |
1531 ms |
925000 KB |
Output is correct |
16 |
Correct |
1322 ms |
925044 KB |
Output is correct |
17 |
Correct |
1996 ms |
925044 KB |
Output is correct |
18 |
Correct |
1837 ms |
925152 KB |
Output is correct |
19 |
Correct |
1816 ms |
925040 KB |
Output is correct |
20 |
Correct |
1869 ms |
925048 KB |
Output is correct |
21 |
Correct |
1979 ms |
925044 KB |
Output is correct |
22 |
Correct |
1957 ms |
925100 KB |
Output is correct |
23 |
Correct |
2658 ms |
925048 KB |
Output is correct |
24 |
Correct |
3046 ms |
925048 KB |
Output is correct |
25 |
Correct |
1188 ms |
924284 KB |
Output is correct |
26 |
Correct |
1449 ms |
924956 KB |
Output is correct |
27 |
Correct |
1417 ms |
925060 KB |
Output is correct |
28 |
Correct |
1405 ms |
925056 KB |
Output is correct |
29 |
Correct |
1409 ms |
925048 KB |
Output is correct |
30 |
Correct |
1900 ms |
925052 KB |
Output is correct |
31 |
Correct |
1966 ms |
925864 KB |
Output is correct |
32 |
Correct |
2293 ms |
925904 KB |
Output is correct |
33 |
Correct |
1917 ms |
926144 KB |
Output is correct |
34 |
Correct |
2750 ms |
925988 KB |
Output is correct |
35 |
Correct |
1848 ms |
925900 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
431 ms |
920976 KB |
Output is correct |
2 |
Runtime error |
220 ms |
14016 KB |
Execution killed with signal 11 |
3 |
Halted |
0 ms |
0 KB |
- |