제출 #563801

#제출 시각아이디문제언어결과실행 시간메모리
563801kartelDungeons Game (IOI21_dungeons)C++17
50 / 100
7014 ms796608 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][50]; ll sum_win[N][50]; ll need_lose[N][50]; ll need_win[N][50]; int up_lose[N][50], up_win[N][50]; 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 < 50; 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; while (x != n) { for (int st = 49; st >= 0 && x != n; st--) { if (z < need_lose[x][st]) { z += sum_lose[x][st]; x = up_lose[x][st]; } } for (int st = 49; st >= 0 && x != n; st--) { if (z >= need_win[x][st]) { z += sum_win[x][st]; x = up_win[x][st]; } } } 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...