#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]);
FOR(i, 0, h) FOR(j, 0, w) 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 |
36 ms |
85444 KB |
Output is correct |
2 |
Correct |
38 ms |
85400 KB |
Output is correct |
3 |
Correct |
37 ms |
85328 KB |
Output is correct |
4 |
Correct |
36 ms |
85600 KB |
Output is correct |
5 |
Correct |
36 ms |
85564 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
36 ms |
85444 KB |
Output is correct |
2 |
Correct |
38 ms |
85400 KB |
Output is correct |
3 |
Correct |
37 ms |
85328 KB |
Output is correct |
4 |
Correct |
36 ms |
85600 KB |
Output is correct |
5 |
Correct |
36 ms |
85564 KB |
Output is correct |
6 |
Correct |
36 ms |
85400 KB |
Output is correct |
7 |
Correct |
37 ms |
85444 KB |
Output is correct |
8 |
Correct |
36 ms |
85364 KB |
Output is correct |
9 |
Correct |
36 ms |
85340 KB |
Output is correct |
10 |
Correct |
37 ms |
85592 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
36 ms |
85444 KB |
Output is correct |
2 |
Correct |
38 ms |
85400 KB |
Output is correct |
3 |
Correct |
37 ms |
85328 KB |
Output is correct |
4 |
Correct |
36 ms |
85600 KB |
Output is correct |
5 |
Correct |
36 ms |
85564 KB |
Output is correct |
6 |
Correct |
36 ms |
85400 KB |
Output is correct |
7 |
Correct |
37 ms |
85444 KB |
Output is correct |
8 |
Correct |
36 ms |
85364 KB |
Output is correct |
9 |
Correct |
36 ms |
85340 KB |
Output is correct |
10 |
Correct |
37 ms |
85592 KB |
Output is correct |
11 |
Correct |
231 ms |
91332 KB |
Output is correct |
12 |
Correct |
51 ms |
90308 KB |
Output is correct |
13 |
Correct |
111 ms |
90308 KB |
Output is correct |
14 |
Correct |
566 ms |
91584 KB |
Output is correct |
15 |
Correct |
183 ms |
90940 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
36 ms |
85444 KB |
Output is correct |
2 |
Correct |
38 ms |
85400 KB |
Output is correct |
3 |
Correct |
37 ms |
85328 KB |
Output is correct |
4 |
Correct |
36 ms |
85600 KB |
Output is correct |
5 |
Correct |
36 ms |
85564 KB |
Output is correct |
6 |
Correct |
36 ms |
85400 KB |
Output is correct |
7 |
Correct |
37 ms |
85444 KB |
Output is correct |
8 |
Correct |
36 ms |
85364 KB |
Output is correct |
9 |
Correct |
36 ms |
85340 KB |
Output is correct |
10 |
Correct |
37 ms |
85592 KB |
Output is correct |
11 |
Correct |
231 ms |
91332 KB |
Output is correct |
12 |
Correct |
51 ms |
90308 KB |
Output is correct |
13 |
Correct |
111 ms |
90308 KB |
Output is correct |
14 |
Correct |
566 ms |
91584 KB |
Output is correct |
15 |
Correct |
183 ms |
90940 KB |
Output is correct |
16 |
Correct |
447 ms |
93772 KB |
Output is correct |
17 |
Execution timed out |
1584 ms |
97604 KB |
Time limit exceeded |
18 |
Halted |
0 ms |
0 KB |
- |