제출 #1196834

#제출 시각아이디문제언어결과실행 시간메모리
1196834GoBananas69Rainforest Jumps (APIO21_jumps)C++20
37 / 100
4043 ms13716 KiB
#include <cassert> #include <cstdio> #include <queue> #include <vector> #include <iostream> #include "jumps.h" using namespace std; vector<vector<int>> adj; bool subtask1 = true; void init(int n, vector<int> h) { adj.resize(n); vector<int> q; for (int i = 0; i < n; ++i) { if (h[i] != i + 1) subtask1 = false; while (!q.empty() && h[q.back()] < h[i]) { q.pop_back(); } if (!q.empty()) { adj[i].push_back(q.back()); } q.push_back(i); } q.clear(); for (int i = n - 1; i>=0; --i) { while (!q.empty() && h[q.back()] < h[i]) { q.pop_back(); } if (!q.empty()) { adj[i].push_back(q.back()); } q.push_back(i); } } int minimum_jumps(int A, int B, int C, int D) { if (subtask1) { return C - B; } queue<int> q; int n = adj.size(); vector<int> dist(n, -1); for (int i = A; i <= B; ++i) { q.push(i); dist[i] = 0; } while (!q.empty()) { int u = q.front(); q.pop(); for (int &v : adj[u]) { if (C <= v && v <= D) return dist[u] + 1; if (dist[v] != -1) continue; dist[v] = dist[u] + 1; q.push(v); } } return -1; }
#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...