Submission #1214407

#TimeUsernameProblemLanguageResultExecution timeMemory
1214407omsincoconutDungeons Game (IOI21_dungeons)C++17
0 / 100
3 ms5956 KiB
#include "dungeons.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; int n; vector<int> s, p, w, l; const ll INF = 1e18; const int MAXBIT = 30, MAXN = 4e5+5; int dist; vector<ll> ss; int skip[7][MAXBIT][MAXN]; ll gain[7][MAXBIT][MAXN]; void init(int _n, vector<int> _s, vector<int> _p, vector<int> _w, vector<int> _l) { n = _n; s = _s; p = _p; w = _w; l = _l; s.push_back(0); p.push_back(0); w.push_back(n); l.push_back(n); for (ll i : s) ss.push_back(i); ss.push_back(0); ss.push_back(INF); sort(ss.begin(), ss.end()); ss.resize(unique(ss.begin(), ss.end()) - ss.begin()); dist = ss.size(); for (int d = 0; d < dist; d++) { for (int i = 0; i <= n; i++) { skip[d][0][i] = (ss[d] >= s[i] ? w[i] : l[i]); gain[d][0][i] = (ss[d] >= s[i] ? s[i] : p[i]); } for (int j = 0; j < MAXBIT-1; j++) { for (int i = 0; i <= n; i++) { int sk = skip[d][j][i]; skip[d][j+1][i] = skip[d][j][sk]; gain[d][j+1][i] = gain[d][j][i] + gain[d][j][sk]; } } } for (ll i : ss) cout << i << " "; cout << "--\n"; } long long simulate(int x, int _z) { ll z = _z; for (int d = 0; d < dist-1; d++) { for (int j = MAXBIT-1; j >= 0; j--) { if (z + gain[d][j][x] < ss[d+1] && skip[d][j][x] != n) { z += gain[d][j][x]; x = skip[d][j][x]; } } if (z >= s[x] && w[x] == n) return z + s[x]; if (z < s[x] && l[x] == n) return z + p[x]; if (z < ss[d+1] && skip[d][0][x] != n) { z += gain[d][0][x]; x = skip[d][0][x]; } if (z >= s[x] && w[x] == n) return z + s[x]; if (z < s[x] && l[x] == n) return z + p[x]; } return z; }
#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...