Submission #563812

#TimeUsernameProblemLanguageResultExecution timeMemory
563812kartelDungeons Game (IOI21_dungeons)C++17
50 / 100
888 ms405176 KiB
#include <bits/stdc++.h> //#include "grader.cpp" #include "dungeons.h" #pragma GCC optimize("unroll-loops") #pragma GCC optimize("-O3") #pragma GCC optimize("-Ofast") using namespace std; typedef long long ll; const int N = 4e5 + 500; ll sum_lose[N][25]; ll sum_win[N][25]; ll need_lose[N][25]; ll need_win[N][25]; int up_lose[N][25], up_win[N][25]; int n; void init(int _n, vector <int> s, vector <int> p, vector <int> w, vector <int> l) { n = _n; for (int i = 0; i < n; i++) { need_lose[i][0] = s[i]; need_win[i][0] = s[i]; sum_lose[i][0] = p[i]; sum_win[i][0] = s[i]; up_lose[i][0] = l[i]; up_win[i][0] = w[i]; } for (int st = 1; st < 25; st++) { for (int i = 0; i < n; i++) { if (up_lose[i][st - 1] != n) { int to = up_lose[i][st - 1]; need_lose[i][st] = min(need_lose[i][st - 1], need_lose[to][st - 1] - sum_lose[i][st - 1]); sum_lose[i][st] = sum_lose[i][st - 1] + sum_lose[to][st - 1]; up_lose[i][st] = up_lose[to][st - 1]; } else { up_lose[i][st] = n; sum_lose[i][st] = sum_lose[i][st - 1]; need_lose[i][st] = need_lose[i][st - 1]; } if (up_win[i][st - 1] != n) { int to = up_win[i][st - 1]; need_win[i][st] = max(need_win[i][st - 1], need_win[to][st - 1] - sum_win[i][st - 1]); sum_win[i][st] = sum_win[i][st - 1] + sum_win[to][st - 1]; up_win[i][st] = up_win[to][st - 1]; } else { up_win[i][st] = n; sum_win[i][st] = sum_win[i][st - 1]; need_win[i][st] = need_win[i][st - 1]; } } } } long long simulate(int x, int start) { long long z = start; int cnt = 0; while (x != n) { cnt++; for (int st = 24; st >= 0 && x != n; st--) { if (z < need_lose[x][st]) { z += sum_lose[x][st]; x = up_lose[x][st]; } } for (int st = 24; st >= 0 && x != n; st--) { if (z >= need_win[x][st]) { z += sum_win[x][st]; x = up_win[x][st]; } } assert(cnt <= 30); } 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...