#include<bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
#define tiii tuple<int,int,int>
int INF = numeric_limits<int>::max()/2;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
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;
queue<tiii> pq;
// map<pii, int> dist;
vector<vector<int>> dist(n,vector<int>(5001, INF));
pq.push({0,sr,sc});
int iter = 0;
while(pq.size()){
int d,r,c;
tie(d,r,c) = pq.front(); pq.pop();
if(dist[r][c] < d) continue;
dist[r][c] = d;
if(r == er && ec == c) break;
// horizontal
if(c > 0) pq.push({d+1,r,c-1});
else if(r-1 >= 0)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+1 < 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... |