This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#include "dungeons.h"
constexpr static int MXSIZE = 50001;
constexpr static int MXLOG = 25;
constexpr static int BIG = 1e9;
constexpr static int MXNUM = 1e7;
// Interval, step, current index
int blp[MXLOG][MXLOG][MXSIZE];
long long blc[MXLOG][MXLOG][MXSIZE];
int blm[MXLOG][MXLOG][MXSIZE]; // minimum needed for change
int reduce(long long a)
{
if (a > MXNUM)
return MXNUM;
return a;
}
void init(int n, std::vector<int> s, std::vector<int> p, std::vector<int> w, std::vector<int> l)
{
for (int i = 0; i < MXLOG; i++)
{
// For numbers bigger than or equal to 1<<i but smaller than 1<<(i+1)
for (int j = 0; j < n; j++)
{
blp[i][0][j] = (s[j] <= (1<<i)) ? w[j] : l[j];
blc[i][0][j] = (s[j] <= (1<<i)) ? s[j] : p[j];
blm[i][0][j] = (s[j] <= (1<<i)) ? 1e9 : s[j];
}
blp[i][0][n] = n;
blc[i][0][n] = 0;
blm[i][0][n] = 0;
for (int j = 1; j < n; j++)
{
for (int k = 0; k <= n; k++)
{
blp[i][j][k] = blp[i][j-1][blp[i][j-1][k]];
blc[i][j][k] = blc[i][j-1][k] + blc[i][j-1][blp[i][j-1][k]];
blm[i][j][k] = std::min(blm[i][j-1][k], std::max(0, blm[i][j-1][blp[i][j-1][k]] - reduce(blc[i][j-1][k])));
}
}
}
}
long long simulate(int x, int z)
{
for (int i = 31 - __builtin_clz(z); i < MXLOG; i++)
{
for (int j = MXLOG-1; j >= 0; j--)
{
if (blm[i][j][x] > z)
{
z += blc[i][j][x];
x = blp[i][j][x];
}
}
}
return z;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |