#include<bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
#define tiii tuple<int,int,int>
int main(){
int n;
int sr, sc;
int er, ec;
cin >> n;
cin >> sr >> sc;
cin >> er >> ec;
sr--;sc--;
er--;ec--;
vector<int> arr(n);
for(int i = 0; i < n; i++){
cin >> arr[i];
}
priority_queue<tiii, vector<tiii>, greater<tiii>> pq;
map<pii, int> dist;
pq.push({0,sr,sc});
while(pq.size()){
int d,r,c;
tie(d,r,c) = pq.top(); pq.pop();
if(dist.count({r,c})) continue;
dist[{r,c}] = d;
if(r == er && ec == c) break;
// horizontal
if(c > 0) pq.push({d+1,r,c-1});
else pq.push({d+1,r-1,arr[r-1]});
if(c < arr[r]) pq.push({d+1,r,c+1});
else if(r+1 < n) pq.push({d+1,r+1,0});
// vertical
if(r > 0) pq.push({d+1,r-1,min(c,arr[r-1])});
if(r < n) pq.push({d+1,r+1,min(c,arr[r+1])});
}
cout << dist[{er,ec}] << endl;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |