Submission details
Task:Abandoned warehouse
Sender:aalto26bm_016
Submission time:2026-09-07 17:14:54 +0300
Language:C++ (C++20)
Status:READY
Result:
Test results
testverdicttime
#10.00 sdetails
#2--details
#30.00 sdetails
#40.00 sdetails
#50.00 sdetails
#60.07 sdetails
#7--details
#8--details
#9--details
#100.06 sdetails
#110.10 sdetails
#120.01 sdetails
#130.08 sdetails
#140.00 sdetails
#150.00 sdetails
#160.07 sdetails

Code

#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>

int height, width;
int startX, startY, endX, endY;
std::vector<std::vector<int>> grid;

int find_shortest_path(std::vector<int> &path, int posX, int posY) {
    if (grid[posY][posX] == 1) return -1;
    if (grid[posY][posX] == 3) return 0;

    std::vector<std::pair<int, int>> dist_dir_pairs(4);
    dist_dir_pairs[0] = std::make_pair(std::abs(posX+1 - endX) + std::abs(posY - endY), 0);
    dist_dir_pairs[1] = std::make_pair(std::abs(posX-1 - endX) + std::abs(posY - endY), 1);
    dist_dir_pairs[2] = std::make_pair(std::abs(posX - endX) + std::abs(posY+1 - endY), 2);
    dist_dir_pairs[3] = std::make_pair(std::abs(posX - endX) + std::abs(posY-1 - endY), 3);

    std::sort(dist_dir_pairs.begin(), dist_dir_pairs.end());

    for (int i = 0; i < 4; ++i) {
        int dir = dist_dir_pairs[i].second;
        int last_dir = -1;
        if (path.size() >= 1) last_dir = path.back();
        path.push_back(dir);
        int length = -1;
        std::cout << "check " << dir << " " << path.size() << std::endl;
        switch(dir) {
            case 0:
                if (last_dir == 1) break;
                length = find_shortest_path(path, posX+1, posY);
                break;
            case 1:
                if (last_dir == 0) break;
                length = find_shortest_path(path, posX-1, posY);
                break;
            case 2:
                if (last_dir == 3) break;
                length = find_shortest_path(path, posX, posY+1);
                break;
            case 3:
                if (last_dir == 2) break;
                length = find_shortest_path(path, posX, posY-1);
                break;
        }
        if (length == -1) {
            path.pop_back();
        } else {
            return length+1;
        }
    }
    grid[posY][posX] = 1;
    return -1;
}

int main() {
    std::cin >> height >> width;

    grid = std::vector<std::vector<int>>(height, std::vector<int>(width));
    int x = 0;
    int y = 0;
    for (auto &row : grid) {
        for (auto &cell : row) {
            char input;
            std::cin >> input;
            if (input == '.') {
                cell = 0;
            } else if (input == '#') {
                cell = 1;
            } else if (input == 'A') {
                cell = 2;
                startX = x;
                startY = y;
            } else if (input == 'B') {
                cell = 3;
                endX = x;
                endY = y;
            }
            x++;
        }
        x = 0;
        y++;
    }

    std::vector<int> path;
    int length = find_shortest_path(path, startX, startY);
    if (length == -1) {
        std::cout << "NO" << std::endl;
        return 0;
    }
    std::cout << "YES" << std::endl;
    std::cout << length << std::endl;
    for (uint i = 0; i < path.size(); ++i) {
        int dir = path[i];
        switch(dir) {
            case 0: 
                std::cout << "R";
                break;
            case 1: 
                std::cout << "L";
                break;
            case 2: 
                std::cout << "D";
                break;
            case 3: 
                std::cout << "U";
                break;
        }
    }
}

Test details

Test 1

Verdict:

input
10 10
##.A######
#.##.##.##
#####..###
.#########
...

correct output
NO

user output
check 0 1
check 2 1
check 1 1
check 0 2
check 2 2
...

Test 2

Verdict:

input
10 10
B#..##.#..
#....A##..
#.....#..#
.#......#.
...

correct output
NO

user output
(empty)

Test 3

Verdict:

input
10 10
...#..A.#.
....B...##
...#......
..........
...

correct output
YES
3
LLD

user output
check 1 1
check 1 2
check 2 3
YES
3
...

Test 4

Verdict:

input
10 10
.#........
..........
..........
........#.
...

correct output
YES
1
R

user output
check 0 1
YES
1
R

Test 5

Verdict:

input
10 10
..........
..........
..........
..........
...

correct output
YES
3
RDD

user output
check 0 1
check 2 2
check 2 3
YES
3
...

Test 6

Verdict:

input
1000 1000
##.###..######.#########.###.#...

correct output
NO

user output
check 0 1
check 3 1
check 1 1
check 2 1
check 0 2
...

Test 7

Verdict:

input
1000 1000
####.#.###....#.......##.##.#....

correct output
YES
626
LLLDDRDDDDLDLDDLLLLLDDDDLLDLDL...

user output
(empty)

Test 8

Verdict:

input
1000 1000
....#.##......#....#......#......

correct output
YES
364
LULULLULLLULLLLLUULLLLUUULLLLL...

user output
(empty)

Test 9

Verdict:

input
1000 1000
.................#......#........

correct output
YES
1003
LLLLLLLLLLLLLLLLLLLLLLLLLDLLLL...

user output
(empty)

Test 10

Verdict:

input
1000 1000
.................................

correct output
YES
947
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL...

user output
check 1 1
check 1 2
check 1 3
check 1 4
check 1 5
...

Test 11

Verdict:

input
1000 3
A#B
.#.
.#.
.#.
...

correct output
YES
2000
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD...

user output
check 0 1
check 1 1
check 0 2
check 1 2
check 0 3
...

Test 12

Verdict:

input
3 1000
A................................

correct output
YES
2000
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRR...

user output
check 2 1
check 0 1
check 1 2
check 2 2
check 0 2
...

Test 13

Verdict:

input
999 999
A#...#...#...#...#...#...#...#...

correct output
YES
499998
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD...

user output
check 0 1
check 1 1
check 0 2
check 1 2
check 0 3
...

Test 14

Verdict:

input
1 3
A.B

correct output
YES
2
RR

user output
check 0 1
check 0 2
YES
2
RR

Test 15

Verdict:

input
2 2
##
AB

correct output
YES
1
R

user output
check 0 1
YES
1
R

Test 16

Verdict:

input
1000 1000
A................................

correct output
YES
1998
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRR...

user output
check 0 1
check 0 2
check 0 3
check 0 4
check 0 5
...