Submission #973509

# Submission time Handle Problem Language Result Execution time Memory
973509 2024-05-02T06:05:38 Z njoop Portals (BOI14_portals) C++17
70 / 100
1000 ms 91236 KB
#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#define ti tuple<int, int, int>
using namespace std;

int r, c, dp[1010][1010], stx, sty, enx, eny, cx, cy, cdi, mn[1010][1010];
int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
char arr[1010][1010];
pair<int, int> dir[4][1010][1010], cur;
priority_queue<ti, vector<ti>, greater<ti>> pq;

int main() {
    cin.tie(0)->sync_with_stdio(0);
    cin >> r >> c;
    for(int i=0; i<1010; i++) for(int j=0; j<1010; j++) arr[i][j] = '#';
    for(int i=1; i<=r; i++) {
        for(int j=1; j<=c; j++) {
            cin >> arr[i][j];
            if(arr[i][j] == 'S') {
                stx = i;
                sty = j;
            }
            if(arr[i][j] == 'C') {
                enx = i;
                eny = j;
            }
            dp[i][j] = 1e9;
        }
    }
    for(int j=0; j<=c+1; j++) {
        for(int i=0; i<=r+1; i++) {
            if(arr[i][j] == '#') cur = {i+1, j};
            dir[0][i][j] = cur;
        }
    }
    for(int i=0; i<=r+1; i++) {
        for(int j=0; j<=c+1; j++) {
            if(arr[i][j] == '#') cur = {i, j+1};
            dir[1][i][j] = cur;
        }
    }
    for(int j=0; j<=c+1; j++) {
        for(int i=r+1; i>=0; i--) {
            if(arr[i][j] == '#') cur = {i-1, j};
            dir[2][i][j] = cur;
        }
    }
    for(int i=0; i<=r+1; i++) {
        for(int j=c+1; j>=0; j--) {
            if(arr[i][j] == '#') cur = {i, j-1};
            dir[3][i][j] = cur;
        }
    }
    for(int i=1; i<=r; i++) {
        for(int j=1; j<=c; j++) {
            mn[i][j] = 1e9;
            for(int k=0; k<4; k++) {
                mn[i][j] = min(mn[i][j], abs(dir[k][i][j].first-i) + abs(dir[k][i][j].second-j));
            }
        }
    }
    pq.push({0, stx, sty});
    while(pq.size()) {
        cdi = get<0>(pq.top());
        cx = get<1>(pq.top());
        cy = get<2>(pq.top());
        pq.pop();
        if(cx < 1 || cx > r || cy < 1 || cy > c || dp[cx][cy] <= cdi || arr[cx][cy] == '#') continue;
        dp[cx][cy] = cdi;
        if(cx == enx && cy == eny) {
            cout << dp[enx][eny];
            return 0;
        }
        for(int i=0; i<4; i++) {
            pq.push({cdi+1, cx+dx[i], cy+dy[i]});
        }
        for(int i=0; i<4; i++) {
            pq.push({cdi+mn[cx][cy]+1, dir[i][cx][cy].first, dir[i][cx][cy].second});
        }
    }
    cout << dp[enx][eny];
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 10588 KB Output is correct
2 Correct 2 ms 10588 KB Output is correct
3 Correct 1 ms 10588 KB Output is correct
4 Correct 2 ms 10588 KB Output is correct
5 Correct 1 ms 10588 KB Output is correct
6 Correct 2 ms 10588 KB Output is correct
7 Correct 2 ms 10588 KB Output is correct
8 Correct 2 ms 10588 KB Output is correct
9 Correct 2 ms 10588 KB Output is correct
10 Correct 2 ms 10588 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 10584 KB Output is correct
2 Correct 1 ms 10600 KB Output is correct
3 Correct 2 ms 10588 KB Output is correct
4 Correct 2 ms 10588 KB Output is correct
5 Correct 2 ms 10584 KB Output is correct
6 Correct 2 ms 10588 KB Output is correct
7 Correct 2 ms 10588 KB Output is correct
8 Correct 2 ms 10588 KB Output is correct
9 Correct 5 ms 19036 KB Output is correct
10 Correct 4 ms 19036 KB Output is correct
11 Correct 4 ms 19036 KB Output is correct
12 Correct 3 ms 19036 KB Output is correct
13 Correct 4 ms 19036 KB Output is correct
14 Correct 1 ms 10588 KB Output is correct
15 Correct 4 ms 19296 KB Output is correct
16 Correct 1 ms 10588 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 10588 KB Output is correct
2 Correct 2 ms 10588 KB Output is correct
3 Correct 2 ms 10588 KB Output is correct
4 Correct 2 ms 10588 KB Output is correct
5 Correct 19 ms 23160 KB Output is correct
6 Correct 24 ms 23128 KB Output is correct
7 Correct 20 ms 23132 KB Output is correct
8 Correct 10 ms 23128 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 10588 KB Output is correct
2 Correct 2 ms 10700 KB Output is correct
3 Correct 1 ms 10588 KB Output is correct
4 Correct 2 ms 10588 KB Output is correct
5 Correct 2 ms 10588 KB Output is correct
6 Correct 1 ms 10588 KB Output is correct
7 Correct 2 ms 10588 KB Output is correct
8 Correct 2 ms 10588 KB Output is correct
9 Correct 4 ms 19036 KB Output is correct
10 Correct 3 ms 19036 KB Output is correct
11 Correct 4 ms 19236 KB Output is correct
12 Correct 4 ms 19032 KB Output is correct
13 Correct 4 ms 19032 KB Output is correct
14 Correct 18 ms 23132 KB Output is correct
15 Correct 24 ms 23132 KB Output is correct
16 Correct 19 ms 23132 KB Output is correct
17 Correct 22 ms 23132 KB Output is correct
18 Correct 30 ms 23388 KB Output is correct
19 Correct 5 ms 23132 KB Output is correct
20 Correct 20 ms 24788 KB Output is correct
21 Correct 18 ms 23132 KB Output is correct
22 Correct 20 ms 23132 KB Output is correct
23 Correct 23 ms 23132 KB Output is correct
24 Correct 49 ms 23888 KB Output is correct
25 Correct 1 ms 10588 KB Output is correct
26 Correct 4 ms 18908 KB Output is correct
27 Correct 1 ms 10584 KB Output is correct
28 Correct 8 ms 23132 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 10588 KB Output is correct
2 Correct 1 ms 10588 KB Output is correct
3 Correct 1 ms 10588 KB Output is correct
4 Correct 1 ms 10588 KB Output is correct
5 Correct 1 ms 10584 KB Output is correct
6 Correct 2 ms 10588 KB Output is correct
7 Correct 1 ms 10588 KB Output is correct
8 Correct 1 ms 10588 KB Output is correct
9 Correct 4 ms 19032 KB Output is correct
10 Correct 4 ms 19036 KB Output is correct
11 Correct 3 ms 19036 KB Output is correct
12 Correct 4 ms 19036 KB Output is correct
13 Correct 4 ms 18900 KB Output is correct
14 Correct 18 ms 23132 KB Output is correct
15 Correct 27 ms 23128 KB Output is correct
16 Correct 17 ms 23132 KB Output is correct
17 Correct 22 ms 23132 KB Output is correct
18 Correct 27 ms 23388 KB Output is correct
19 Correct 5 ms 23128 KB Output is correct
20 Correct 17 ms 24804 KB Output is correct
21 Correct 19 ms 23132 KB Output is correct
22 Correct 20 ms 23132 KB Output is correct
23 Correct 22 ms 23196 KB Output is correct
24 Correct 744 ms 42228 KB Output is correct
25 Execution timed out 1067 ms 91236 KB Time limit exceeded
26 Halted 0 ms 0 KB -