Submission #579900

#TimeUsernameProblemLanguageResultExecution timeMemory
579900joelauDungeons Game (IOI21_dungeons)C++17
25 / 100
221 ms222924 KiB
#include "dungeons.h" #include <bits/stdc++.h> using namespace std; long long N, S[400005], P[400005], W[400005], L[400005]; vector<long long> vals; pair<long long,long long> par[7][400005][25]; void init(int n, vector<int> s, vector<int> p, vector<int> w, vector<int> l) { N = n; for (long long i = 0; i < N; ++i) S[i] = s[i], P[i] = p[i], W[i] = w[i], L[i] = l[i], vals.push_back(S[i]); sort(vals.begin(),vals.end()); vals.resize(unique(vals.begin(),vals.end()) - vals.begin()); vals.push_back(4e18); for (long long i = 0; i < vals.size(); ++i) { par[i][N][0] = make_pair(-1,-1); for (long long j = 0; j < N; ++j) { if (vals[i] > S[j]) par[i][j][0] = make_pair(W[j],S[j]); else par[i][j][0] = make_pair(L[j],P[j]); } for (long long k = 1; k < 25; ++k) for (long long j = 0; j <= N; ++j) { if (par[i][j][k-1] == make_pair(-1ll,-1ll)) par[i][j][k] = make_pair(-1,-1); else { par[i][j][k].first = par[i][par[i][j][k-1].first][k-1].first; if (par[i][j][k].first == -1) par[i][j][k].second = -1; else par[i][j][k].second = par[i][j][k-1].second + par[i][par[i][j][k-1].first][k-1].second; } } } } long long simulate(int x, int z) { long long ans = z; for (long long i = 0; i < vals.size(); ++i) { for (long long k = 24; k >= 0; --k) if (par[i][x][k] != make_pair(-1ll,-1ll) && ans+par[i][x][k].second < vals[i]) ans += par[i][x][k].second, x = par[i][x][k].first; if (x == N) return ans; if (ans < vals[i]) ans += par[i][x][0].second, x = par[i][x][0].first; } return ans; }

Compilation message (stderr)

dungeons.cpp: In function 'void init(int, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
dungeons.cpp:16:26: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   16 |  for (long long i = 0; i < vals.size(); ++i) {
      |                        ~~^~~~~~~~~~~~~
dungeons.cpp: In function 'long long int simulate(int, int)':
dungeons.cpp:35:26: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |  for (long long i = 0; i < vals.size(); ++i) {
      |                        ~~^~~~~~~~~~~~~
#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...