#include "dungeons.h"
#include <vector>
#include<iomanip>
#include<algorithm>
#include<iostream>
using namespace std;
#define ll long long
#define vi vector<int>
#define vl vector<ll>
int n;
vi S, P, W, L;
vl M, M2, M3;
void print(vi &L1) {
cerr << "{";
for (auto i : L1) {
cerr << i << ", ";
}
cerr << "}\n";
}
void print(vl &L1) {
cerr << "{";
for (auto i : L1) {
cerr << i << ", ";
}
cerr << "}\n";
}
ll oinkoink(int p) {
if (p == n) return 0;
if (M[p] != -1) return M[p];
return M[p] = oinkoink(W[p]) + 1;
}
ll oinkoinkoink(int p, ll z) {
if (p == n) return -1;
if (M2[p] != -1) return -1;
if (M3[p] != -1) {
return M2[p] = z - M3[p];
}
M3[p] = z;
ll a = oinkoinkoink(L[p], z + P[p]);
if (a == -1) {
M2[p] = -2;
return -1;
}
if (M2[p] != -1) {
return -1;
}
M2[p] = a;
return a;
}
void init(int N, std::vector<int> s, std::vector<int> p, std::vector<int> w, std::vector<int> l) {
n = N;
S = s;
P = p;
W = w;
L = l;
M = vl(n, -1);
M2 = vl(n, -1);
for (int i = 0; i < n; i++) oinkoink(i);
for (int i = 0; i < n; i++) {
M3 = vl(n, -1);
oinkoinkoink(i, 0);
}
/*
cerr << "M : ";
print(M);
cerr << "M2 : ";
print(M2);
cerr << "M3 : ";
print(M3); //*/
return;
}
ll oink(ll x, ll z) {
//cerr << "oink(" << x << ", " << z <<")" << endl;
if (x == n) return z;
if (z >= S[0]) return z + M[x]*S[0];
if (M2[x] == -2) return oink(L[x], z+P[x]);
//cerr << "S[0]-z-1 : " << S[0]-z-1 << ", M2[x] : " << M2[x] << ", ((S[0]-z-1)/M2[x])*M2[x] : " << ((S[0]-z-1)/M2[x])*M2[x] << ", z : " << z << endl;
z += ((S[0]-z-1)/M2[x])*M2[x];
return oink(L[x], z + P[x]);
}
long long simulate(int x, int z) {
return oink(x, 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... |