Submission #1363639

#TimeUsernameProblemLanguageResultExecution timeMemory
1363639sieg__v1Rainforest Jumps (APIO21_jumps)C++20
0 / 100
0 ms408 KiB
#include "jumps.h"
#include <vector>
#include <algorithm>

#include <queue>
using namespace std;

long long n_size,INF = 10000000000;
vector<int> a;
int dist[2001][2001];
void init(int N, vector<int> H) {
    vector<vector<int>> gp(N);
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < N; j++) dist[i][j] = INF;
        
        for (int j = i + 1; j < N; ++j) {
            if (H[j] > H[i]) { gp[i].push_back(j); break; }
        }
        for (int j = i - 1; j >= 0; --j) {
            if (H[j] > H[i]) { gp[i].push_back(j); break; }
        }
    }

    for (int i = 0; i < N; ++i) {
        dist[i][i] = 0;
        queue<int> q;
        q.push(i);
        while (!q.empty()) {
            int u = q.front(); q.pop();
            for (int v : gp[u]) {
                if (dist[i][v] == INF) {
                    dist[i][v] = dist[i][u] + 1;
                    q.push(v);
                }
            }
        }
    }
}

int minimum_jumps(int A, int B, int C, int D) {
    int min_ans = INF;
    for (int i = A; i <= B; ++i) {
        for (int j = C; j <= D; ++j) {
            if (dist[i][j] < min_ans) {
                min_ans = dist[i][j];
            }
        }
    }

    if (min_ans >= INF) {
        return -1;
    }

    return (int)min_ans;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...