답안 #422321

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
422321 2021-06-10T03:07:19 Z SirCovidThe19th 로봇 (APIO13_robots) C++14
60 / 100
1500 ms 97224 KB
#include <bits/stdc++.h>
using namespace std;

#define FOR(i, x, y) for (int i = x; i < y; i++)

const int mx = 500;

int n, w, h, ans = 505*505, dp[mx][mx][9][9], di[4] = {-1, 0, 1, 0}, dj[4] = {0, 1, 0, -1}; 
char grid[mx][mx]; pair<int, int> pos[4][mx][mx]; list<pair<int, int>> trav[mx*mx];

pair<int, int> nextPos(int i, int j, int d){
    int old = d; d = (d-(grid[i][j] == 'A')+(grid[i][j] == 'C')+4)%4;
    int r = i+di[d], c = j+dj[d]; pos[old][i][j] = {-2, -2}; pair<int, int> ret;
    if (!(r < h and r >= 0 and c < w and c >= 0 and grid[r][c] != 'x')) ret = {i, j};
    else if (pos[d][r][c] != make_pair(-1, -1)) ret = pos[d][r][c];
    else ret = nextPos(r, c, d);
    return pos[old][i][j] = ret;
}

int main(){
    cin >> n >> w >> h; memset(dp, 0x3f, sizeof(dp));
    FOR(i, 0, h) FOR(j, 0, w) { cin >> grid[i][j]; if (isdigit(grid[i][j])) dp[i][j][grid[i][j]-'1'][grid[i][j]-'1'] = 0; }
    FOR(i, 0, h) FOR(j, 0, w) FOR(d, 0, 4) pos[d][i][j] = {-1, -1};
    FOR(i, 0, h) FOR(j, 0, w) FOR(d, 0, 4) if (grid[i][j] != 'x') nextPos(i, j, d);
    FOR(l, 0, n){
        FOR(x, 0, n-l){
            int y = x+l; 
            FOR(i, 0, h) FOR(j, 0, w) if (grid[i][j] != 'x'){
                FOR(mid, x, y)
                    dp[i][j][x][y] = min(dp[i][j][x][y], dp[i][j][x][mid]+dp[i][j][mid+1][y]);
                if (dp[i][j][x][y] < w*h) trav[dp[i][j][x][y]].push_back({i, j});
            }
            FOR(i, 0, w*h){
                while (!trav[i].empty()){
                    int r, c; tie(r, c) = trav[i].front(); trav[i].pop_front();
                    FOR(d, 0, 4){
                        int r1, c1; tie(r1, c1) = pos[d][r][c]; 
                        if (r1 < 0 or c1 < 0) continue;
                        if (dp[r][c][x][y]+1 < dp[r1][c1][x][y]){
                            dp[r1][c1][x][y] = dp[r][c][x][y]+1;
                            trav[dp[r1][c1][x][y]].push_back({r1, c1});
                        }
                    }
                }
            }
        }
    }
    FOR(i, 0, h) FOR(j, 0, w) ans = min(ans, dp[i][j][0][n-1]);
    cout<<((ans > w*h) ? -1 : ans);
}
# 결과 실행 시간 메모리 Grader output
1 Correct 37 ms 85452 KB Output is correct
2 Correct 38 ms 85388 KB Output is correct
3 Correct 38 ms 85344 KB Output is correct
4 Correct 38 ms 85556 KB Output is correct
5 Correct 38 ms 85536 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 37 ms 85452 KB Output is correct
2 Correct 38 ms 85388 KB Output is correct
3 Correct 38 ms 85344 KB Output is correct
4 Correct 38 ms 85556 KB Output is correct
5 Correct 38 ms 85536 KB Output is correct
6 Correct 42 ms 85364 KB Output is correct
7 Correct 38 ms 85400 KB Output is correct
8 Correct 38 ms 85396 KB Output is correct
9 Correct 40 ms 85436 KB Output is correct
10 Correct 39 ms 85572 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 37 ms 85452 KB Output is correct
2 Correct 38 ms 85388 KB Output is correct
3 Correct 38 ms 85344 KB Output is correct
4 Correct 38 ms 85556 KB Output is correct
5 Correct 38 ms 85536 KB Output is correct
6 Correct 42 ms 85364 KB Output is correct
7 Correct 38 ms 85400 KB Output is correct
8 Correct 38 ms 85396 KB Output is correct
9 Correct 40 ms 85436 KB Output is correct
10 Correct 39 ms 85572 KB Output is correct
11 Correct 230 ms 91104 KB Output is correct
12 Correct 57 ms 90176 KB Output is correct
13 Correct 100 ms 90200 KB Output is correct
14 Correct 507 ms 91508 KB Output is correct
15 Correct 165 ms 90564 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 37 ms 85452 KB Output is correct
2 Correct 38 ms 85388 KB Output is correct
3 Correct 38 ms 85344 KB Output is correct
4 Correct 38 ms 85556 KB Output is correct
5 Correct 38 ms 85536 KB Output is correct
6 Correct 42 ms 85364 KB Output is correct
7 Correct 38 ms 85400 KB Output is correct
8 Correct 38 ms 85396 KB Output is correct
9 Correct 40 ms 85436 KB Output is correct
10 Correct 39 ms 85572 KB Output is correct
11 Correct 230 ms 91104 KB Output is correct
12 Correct 57 ms 90176 KB Output is correct
13 Correct 100 ms 90200 KB Output is correct
14 Correct 507 ms 91508 KB Output is correct
15 Correct 165 ms 90564 KB Output is correct
16 Correct 347 ms 93500 KB Output is correct
17 Execution timed out 1588 ms 97224 KB Time limit exceeded
18 Halted 0 ms 0 KB -