| Task: | Abandoned warehouse |
| Sender: | aalto26bm_018 |
| Submission time: | 2026-09-07 16:52:45 +0300 |
| Language: | C++ (C++20) |
| Status: | READY |
| Result: | ACCEPTED |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.00 s | details |
| #2 | ACCEPTED | 0.00 s | details |
| #3 | ACCEPTED | 0.00 s | details |
| #4 | ACCEPTED | 0.00 s | details |
| #5 | ACCEPTED | 0.00 s | details |
| #6 | ACCEPTED | 0.07 s | details |
| #7 | ACCEPTED | 0.09 s | details |
| #8 | ACCEPTED | 0.08 s | details |
| #9 | ACCEPTED | 0.10 s | details |
| #10 | ACCEPTED | 0.10 s | details |
| #11 | ACCEPTED | 0.01 s | details |
| #12 | ACCEPTED | 0.00 s | details |
| #13 | ACCEPTED | 0.11 s | details |
| #14 | ACCEPTED | 0.00 s | details |
| #15 | ACCEPTED | 0.00 s | details |
| #16 | ACCEPTED | 0.10 s | details |
Code
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int df[] = {-1, 1, 0, 0};
int dc[] = {0, 0, -1, 1};
char dir_char[] = {'U', 'D', 'L', 'R'};
struct Step {
int prev_i, prev_j;
char move;
};
int main() {
int n, m;
if (!(cin >> n >> m)) return 0;
vector<vector<char>> map(n, vector<char>(m));
int ini = -1, inj = -1;
int end_i = -1, end_j = -1;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> map[i][j];
if (map[i][j] == 'A') {
ini = i;
inj = j;
} else if (map[i][j] == 'B') {
end_i = i;
end_j = j;
}
}
}
vector<vector<Step>> parent(n, vector<Step>(m, {-1, -1, ' '}));
vector<vector<bool>> visited(n, vector<bool>(m, false));
queue<pair<int, int>> q;
q.push({ini, inj});
visited[ini][inj] = true;
bool found = false;
while (!q.empty()) {
auto [i, j] = q.front();
q.pop();
if (i == end_i && j == end_j) {
found = true;
break;
}
for (int k = 0; k < 4; k++) {
int ni = i + df[k];
int nj = j + dc[k];
if (ni >= 0 && ni < n && nj >= 0 && nj < m) {
if (!visited[ni][nj] && map[ni][nj] != '#') {
visited[ni][nj] = true;
parent[ni][nj] = {i, j, dir_char[k]};
q.push({ni, nj});
}
}
}
}
if (!found) {
cout << "NO\n";
} else {
cout << "YES\n";
vector<char> bestpath;
int curr_i = end_i;
int curr_j = end_j;
while (curr_i != ini || curr_j != inj) {
Step p = parent[curr_i][curr_j];
bestpath.push_back(p.move);
curr_i = p.prev_i;
curr_j = p.prev_j;
}
reverse(bestpath.begin(), bestpath.end());
cout << bestpath.size() << "\n";
for (char c : bestpath) {
cout << c;
}
cout << "\n";
}
return 0;
}Test details
Test 1
Verdict: ACCEPTED
| input |
|---|
| 10 10 ##.A###### #.##.##.## #####..### .######### ... |
| correct output |
|---|
| NO |
| user output |
|---|
| NO |
Test 2
Verdict: ACCEPTED
| input |
|---|
| 10 10 B#..##.#.. #....A##.. #.....#..# .#......#. ... |
| correct output |
|---|
| NO |
| user output |
|---|
| NO |
Test 3
Verdict: ACCEPTED
| input |
|---|
| 10 10 ...#..A.#. ....B...## ...#...... .......... ... |
| correct output |
|---|
| YES 3 LLD |
| user output |
|---|
| YES 3 DLL |
Test 4
Verdict: ACCEPTED
| input |
|---|
| 10 10 .#........ .......... .......... ........#. ... |
| correct output |
|---|
| YES 1 R |
| user output |
|---|
| YES 1 R |
Test 5
Verdict: ACCEPTED
| input |
|---|
| 10 10 .......... .......... .......... .......... ... |
| correct output |
|---|
| YES 3 RDD |
| user output |
|---|
| YES 3 DDR |
Test 6
Verdict: ACCEPTED
| input |
|---|
| 1000 1000 ##.###..######.#########.###.#... |
| correct output |
|---|
| NO |
| user output |
|---|
| NO |
Test 7
Verdict: ACCEPTED
| input |
|---|
| 1000 1000 ####.#.###....#.......##.##.#.... |
| correct output |
|---|
| YES 626 LLLDDRDDDDLDLDDLLLLLDDDDLLDLDL... |
| user output |
|---|
| YES 626 LLLDDRDDDDDDLLDDLLDDDLDDLLLDDL... |
Test 8
Verdict: ACCEPTED
| input |
|---|
| 1000 1000 ....#.##......#....#......#...... |
| correct output |
|---|
| YES 364 LULULLULLLULLLLLUULLLLUUULLLLL... |
| user output |
|---|
| YES 364 UUUUUULUUUUUUUUUUULLLUUUULLUUU... |
Test 9
Verdict: ACCEPTED
| input |
|---|
| 1000 1000 .................#......#........ |
| correct output |
|---|
| YES 1003 LLLLLLLLLLLLLLLLLLLLLLLLLDLLLL... |
| user output |
|---|
| YES 1003 DDDDDDDDDDDDDDDDDLDDDDDDDDDDDD... |
Test 10
Verdict: ACCEPTED
| input |
|---|
| 1000 1000 ................................. |
| correct output |
|---|
| YES 947 LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL... |
| user output |
|---|
| YES 947 UUUUUUUUUUUUUUUUUUUUUUUUUUUUUU... |
Test 11
Verdict: ACCEPTED
| input |
|---|
| 1000 3 A#B .#. .#. .#. ... |
| correct output |
|---|
| YES 2000 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD... |
| user output |
|---|
| YES 2000 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD... |
Test 12
Verdict: ACCEPTED
| input |
|---|
| 3 1000 A................................ |
| correct output |
|---|
| YES 2000 RRRRRRRRRRRRRRRRRRRRRRRRRRRRRR... |
| user output |
|---|
| YES 2000 RRRRRRRRRRRRRRRRRRRRRRRRRRRRRR... |
Test 13
Verdict: ACCEPTED
| input |
|---|
| 999 999 A#...#...#...#...#...#...#...#... |
| correct output |
|---|
| YES 499998 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD... |
| user output |
|---|
| YES 499998 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD... |
Test 14
Verdict: ACCEPTED
| input |
|---|
| 1 3 A.B |
| correct output |
|---|
| YES 2 RR |
| user output |
|---|
| YES 2 RR |
Test 15
Verdict: ACCEPTED
| input |
|---|
| 2 2 ## AB |
| correct output |
|---|
| YES 1 R |
| user output |
|---|
| YES 1 R |
Test 16
Verdict: ACCEPTED
| input |
|---|
| 1000 1000 A................................ |
| correct output |
|---|
| YES 1998 RRRRRRRRRRRRRRRRRRRRRRRRRRRRRR... |
| user output |
|---|
| YES 1998 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD... |
