Submission #1203366

#TimeUsernameProblemLanguageResultExecution timeMemory
1203366HappyCapybaraDungeons Game (IOI21_dungeons)C++17
25 / 100
1217 ms2162688 KiB
#include "dungeons.h" #include<bits/stdc++.h> using namespace std; #define ll long long int n; vector<vector<vector<pair<int,ll>>>> j; vector<int> sl; void init(int n, vector<int> s, vector<int> p, vector<int> w, vector<int> l){ ::n = n; sl.push_back(0); for (int i=0; i<n; i++){ if (find(sl.begin(), sl.end(), s[i]) == sl.end()) sl.push_back(s[i]); } sort(sl.begin(), sl.end()); j.assign(sl.size(), vector<vector<pair<int,ll>>>(n+1, vector<pair<int,ll>>(20))); for (int x=0; x<sl.size(); x++){ j[x][n][0] = {n, 0}; for (int i=0; i<n; i++){ if (sl[x] >= s[i]) j[x][i][0] = {w[i], s[i]}; else j[x][i][0] = {l[i], p[i]}; } } for (int x=0; x<sl.size(); x++){ for (int k=1; k<20; k++){ for (int i=0; i<=n; i++) j[x][i][k] = {j[x][j[x][i][k-1].first][k-1].first, j[x][i][k-1].second+j[x][j[x][i][k-1].first][k-1].second}; } } return; } ll simulate(int x, int iz){ ll z = iz; int y; for (int i=0; i<sl.size(); i++){ if (z >= sl[i]) y = i; } while (x != n){ for (int k=19; k>=0; k--){ if (y+1 == sl.size() || z+j[y][x][k].second < sl[y+1]){ z += j[y][x][k].second; x = j[y][x][k].first; } } z += j[y][x][0].second; x = j[y][x][0].first; for (int i=0; i<sl.size(); i++){ if (z >= sl[i]) y = i; } } 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...