제출 #1223084

#제출 시각아이디문제언어결과실행 시간메모리
1223084AriadnaText editor (CEOI24_editor)C++20
14 / 100
761 ms30736 KiB
#include <bits/stdc++.h>
using namespace std;

const int N = 1e6;
int n, s1, s2, e1, e2;
int len[N];
map<pair<int, int>, int> dist;
bool vis[1000][5001];

void bfs(void) {
    priority_queue<pair<int, pair<int, int>>> q;
    dist[{s1, s2}] = 0;
    vis[s1][s2] = true;
    q.push({0, {s1, s2}});
    while (!q.empty()) {
        int d = -q.top().first;
        pair<int, int> u = q.top().second;
        int u1 = u.first, u2 = u.second;
        q.pop();
        if (d != dist[u]) continue;
        if (u1 == e1 && u2 == e2) return;

        vector<pair<pair<int, int>, int>> adj;
        // <
        if (e2 <= len[u1]) adj.push_back({{u1, e2}, abs(u2-e2)});

        if (u2 > 0) {
            adj.push_back({{u1, 0}, u2});
        } else if (u1 > 0) {
            adj.push_back({{u1-1, len[u1-1]}, 1});
        }
        // >
        if (u2 < len[u1]) {
            adj.push_back({{u1, len[u1]}, abs(len[u1]-u2)});
        } else if (u1+1 < n) {
            adj.push_back({{u1+1, 0}, 1});
        }
        // ^
        if (u1 > 0) {
            if (u2 <= len[u1-1]) adj.push_back({{u1-1, u2}, 1});
            else adj.push_back({{u1-1, len[u1-1]}, 1});
        }
        // v
        if (u1+1 < n) {
            if (u2 <= len[u1+1]) adj.push_back({{u1+1, u2}, 1});
            else adj.push_back({{u1+1, len[u1+1]}, 1});
        }

        for (pair<pair<int, int>, int> p: adj) {
            if (dist.find(p.first) == dist.end()) dist[p.first] = 1e9;
            if (dist[p.first] > dist[u]+p.second) {
                dist[p.first] = dist[u]+p.second;
                q.push({-dist[p.first], p.first});
            }
        }
    }
}

int main() {
    cin >> n;
    cin >> s1 >> s2 >> e1 >> e2;
    --s1; --s2; --e1; --e2;
    for (int i = 0; i < n; ++i) cin >> len[i];
    bfs();
    cout << dist[{e1, e2}] << endl;

    return 0;
}
#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...