Submission #1256175

#TimeUsernameProblemLanguageResultExecution timeMemory
1256175TheScrasseMigrations (IOI25_migrations)C++20
30 / 100
28 ms456 KiB
#include <bits/stdc++.h>
using namespace std;

#define nl "\n"
#define nf endl
#define ll long long
#define pb push_back
#define _ << ' ' <<

#define INF (ll)1e18
#define mod 998244353
#define maxn 110

#include "migrations.h"

vector<ll> parent, dist;
array<ll, 2> opt = {-INF, -1};

int send_message(int N, int i, int Pi) {
    // 30 punti
    if (parent.empty()) {
        parent.resize(N, -1);
        dist.resize(N, 0);
    }
    
    dist[i] = dist[Pi] + 1;
    opt = max(opt, {dist[i], i});

    if (i < N - 40) return 0;

    ll b = N - 1 - i;
    auto [max_dist, id] = opt;
    if (id == i) return 3;
    
    return ((id >> b) & 1) + 1;
}

std::pair<int, int> longest_path(std::vector<int> S) {
    ll N = S.size();
    for (ll i = N - 1; i >= 0; i--) {
        if (S[i] == 3) return {0, i};
    }

    ll ans = 0;
    for (ll i = N - 40; i < N; i++) {
        ll b = N - 1 - i;
        ll val = S[i] - 1;
        ans += (val << b);
    }

    return {0, ans};
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...