Submission #1223434

#TimeUsernameProblemLanguageResultExecution timeMemory
1223434JerRainforest Jumps (APIO21_jumps)C++20
8 / 100
4035 ms1824 KiB
#include "jumps.h"
#include <bits/stdc++.h>
#include <vector>

using namespace std;

const int MAXN = 2005;
pair<int, int> con[MAXN];
int n;

bool vis[MAXN];
int solve(int s, int c, int d){

	for (int i = 0; i < n; i++)
		vis[i] = false;

	queue<int> q;
	q.push(s);

	int l = 0, curr, len;

	while (!q.empty())
	{
		len = q.size();
		for (int z = len; z > 0; z--){
			curr = q.front(), q.pop();

			if (vis[curr])
				continue;
			vis[curr] = true;

			if (curr >= c and curr <= d)
				return l;

			if (con[curr].first != -1)
				q.push(con[curr].first);

			if (con[curr].second != -1)
				q.push(con[curr].second);
		}
		l++;
	}

	return -1;
}

void init(int N, std::vector<int> H) {
	n = N;

	for (int i = 0; i < n; i++)
	{
		con[i].first = -1, con[i].second = -1;
		for (int j = i + 1; j < n; j++){
			if (H[i] < H[j])
				{con[i].second = j; break;}
		}

		for (int j = i - 1; j >= 0; j--){
			if (H[i] < H[j])
				{con[i].first = j; break;}
		}
	}
}

int minimum_jumps(int A, int B, int C, int D) {
	int res = -1, g;

	for (int i = A; i <= B; i++)
	{
		g = solve(i, C, D);
		if (g != -1)
			res = (res == -1) ? g : min(res, g);
	}

	return res;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...