Submission #1062466

#TimeUsernameProblemLanguageResultExecution timeMemory
1062466Ignut던전 (IOI21_dungeons)C++17
0 / 100
7082 ms19776 KiB
/* Ignut
started: 17.08.2024
now: 17.08.2024
████████████████████████████████████████████████████████████████████
████████████████████████████████    ████████████████████████████████
██████████████████████████████        ██████████████████████████████
██████      ██████████████████        ██████████████████      ██████
██████          ██████████████        ██████████████          ██████
██████      ██    ████████████        ████████████    ██      ██████
██████      ████    ██████████        ██████████    ████      ██████
██████      ████      ██████████    ██████████      ████      ██████
██████      ████      ██████████    ██████████    ██████      ██████
██████      ██████    ██████████    ██████████    ██████      ██████
██████      ██████    ████████        ████████    ██████      ██████
██████      ██████      ██████        ██████      ██████      ██████
██████      ████        ████            ████        ████      ██████
██████            ██████████    ████    ██████████            ██████
██████      ██      ██████    ████████    ██████      ██      ██████
██████      ██████            ████████            ██████      ██████
██████                    ██            ██                    ██████
██████████████████████      ████    ████      ██████████████████████
████████████████████████      ██    ██      ████████████████████████
██████████████████████████                ██████████████████████████
██████████████████████████████        ██████████████████████████████
████████████████████████████████████████████████████████████████████
*/

#include <bits/stdc++.h>

using namespace std;
using ll = long long;

const int MAXN = 4e5 + 123;
int n;

vector<int> s, p;
vector<int> w, l;

int ss;

void init(int N, vector<int> S, vector<int> P, vector<int> W, vector<int> L) {
    n = N, s = S, p = P, w = W, l = L;
    ss = s.back();
}

vector<bool> used;

vector<ll> prefSum;

ll simulate(int x, int z) {
    ll pw = z;
    used.assign(n, 0);
    prefSum.assign(n, 0ll);
    ll cycleSum = 0;
    while (x != n) {
        if (used[x]) {
            ll cnt = max(0ll, ss - pw) / (cycleSum - prefSum[x]);
            pw += cnt * (cycleSum - prefSum[x]);
            // cout << "do " << cnt << " sum " << cycleSum - prefSum[x] << '\n';
        }
        used[x] = true;
        prefSum[x] = cycleSum;
        if (pw >= s[x]) {
            pw += s[x];
            x = w[x];
            // cycleSum = 0;
        }
        else {
            pw += p[x];
            cycleSum += p[x];
            x = l[x];
        }
    }
    return pw;
}
#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...