Submission #1068522

# Submission time Handle Problem Language Result Execution time Memory
1068522 2024-08-21T10:27:45 Z vjudge1 Text editor (CEOI24_editor) C++17
14 / 100
529 ms 40704 KB
#include <bits/stdc++.h>
#define int long long

using namespace std;

void solve() {
    int n, sl, sc, el, ec;
    cin >> n >> sl >> sc >> el >> ec;
    int l[n+1];
    for(int i=1; i<=n; ++i) {
        cin >> l[i];
        ++l[i];
    }
    if(n == 2) {
        --l[1], --l[2];
        if(sl == el) {
            cout << abs(ec - sc) << endl;
            return;
        }
        if(sl > el) {
            swap(sl, el);
            swap(sc, ec);
        }
        int ans = l[1] - sc + ec;
        ans = min(ans, 1 + abs(ec - sc));
        ans = min(ans, sc + l[2] - ec);
        cout << ans << endl;
        return;
    }
    priority_queue<pair<int,pair<int,int>>>pq;
    vector<vector<int>>dp(n+1, vector<int>(5005, INT_MAX));
    vector<vector<bool>>visited(n+1, vector<bool>(5005, 0));
    dp[sl][sc] = 0;
    pq.push({0, {sl, sc}});
    while(!pq.empty()) {
        int x = pq.top().second.first, y = pq.top().second.second;
        if(x == el && y == ec) break;
        pq.pop();
        if(visited[x][y]) continue;
        visited[x][y] = 1;
        if(x != n) { // down
            int new_y = y;
            new_y = min(new_y, l[x+1]);
            if(dp[x+1][new_y] > dp[x][y] + 1) {
                dp[x+1][new_y] = dp[x][y] + 1;
                pq.push({-dp[x+1][new_y], {x+1, new_y}});
            }
        }
        if(x != 1) { // up
            int new_y = y;
            new_y = min(new_y, l[x-1]);
            if(dp[x-1][new_y] > dp[x][y] + 1) {
                dp[x-1][new_y] = dp[x][y] + 1;
                pq.push({-dp[x-1][new_y], {x-1, new_y}});
            }
        }
        if(y == 1 && x != 1) { // left up
            int new_x = x - 1, new_y = l[new_x];
            if(dp[x][y] + 1 < dp[new_x][new_y]) {
                dp[new_x][new_y] = dp[x][y] + 1;
                pq.push({-dp[new_x][new_y], {new_x, new_y}});
            }
        } else if(y != 1) { // left
            if(dp[x][y] + 1 < dp[x][y-1]) {
                dp[x][y-1] = dp[x][y] + 1;
                pq.push({-dp[x][y-1], {x, y-1}});
            }
        }
        if(y == l[x] && x != n) { // right down
            int new_x = x+1, new_y = 1;
            if(dp[x][y] + 1 < dp[new_x][new_y]) {
                dp[new_x][new_y] = dp[x][y] + 1;
                pq.push({-dp[new_x][new_y], {new_x, new_y}});
            }
        } else if(y != l[x]) { // right
            if(dp[x][y] + 1 < dp[x][y+1]) {
                dp[x][y+1] = dp[x][y] + 1;
                pq.push({-dp[x][y+1], {x, y+1}});
            }
        }
    }
    cout << dp[el][ec] << endl;
}

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    int t = 1;
    while(t--) solve();

    return 0;
}
 
# Verdict Execution time Memory Grader output
1 Correct 1 ms 600 KB Output is correct
2 Correct 1 ms 600 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 344 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 344 KB Output is correct
6 Incorrect 0 ms 344 KB Output isn't correct
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 600 KB Output is correct
2 Correct 1 ms 600 KB Output is correct
3 Correct 0 ms 344 KB Output is correct
4 Correct 22 ms 38488 KB Output is correct
5 Correct 28 ms 32968 KB Output is correct
6 Correct 19 ms 35932 KB Output is correct
7 Correct 51 ms 37832 KB Output is correct
8 Correct 529 ms 40404 KB Output is correct
9 Correct 322 ms 33096 KB Output is correct
10 Correct 297 ms 33836 KB Output is correct
11 Correct 352 ms 33088 KB Output is correct
12 Correct 283 ms 40704 KB Output is correct
13 Correct 460 ms 40600 KB Output is correct
14 Correct 171 ms 40624 KB Output is correct
15 Correct 39 ms 40440 KB Output is correct
16 Correct 44 ms 40500 KB Output is correct
17 Correct 232 ms 40508 KB Output is correct
18 Correct 235 ms 40444 KB Output is correct
19 Correct 273 ms 40600 KB Output is correct
20 Correct 195 ms 36532 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 600 KB Output is correct
2 Correct 1 ms 600 KB Output is correct
3 Correct 0 ms 344 KB Output is correct
4 Correct 0 ms 344 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 344 KB Output is correct
8 Incorrect 0 ms 344 KB Output isn't correct
9 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 344 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 344 KB Output is correct
6 Incorrect 0 ms 344 KB Output isn't correct
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 600 KB Output is correct
2 Correct 1 ms 600 KB Output is correct
3 Correct 0 ms 344 KB Output is correct
4 Correct 0 ms 344 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 344 KB Output is correct
8 Incorrect 0 ms 344 KB Output isn't correct
9 Halted 0 ms 0 KB -