Submission details
Task:Abandoned warehouse
Sender:aalto26bm_024
Submission time:2026-09-07 18:57:23 +0300
Language:Java
Status:READY
Result:
Test results
testverdicttime
#1ACCEPTED0.06 sdetails
#2ACCEPTED0.06 sdetails
#3ACCEPTED0.06 sdetails
#4ACCEPTED0.07 sdetails
#5ACCEPTED0.06 sdetails
#6ACCEPTED0.38 sdetails
#7ACCEPTED0.63 sdetails
#8ACCEPTED0.68 sdetails
#9ACCEPTED0.99 sdetails
#10--details
#11ACCEPTED0.09 sdetails
#12ACCEPTED0.08 sdetails
#13ACCEPTED0.61 sdetails
#14ACCEPTED0.06 sdetails
#15ACCEPTED0.06 sdetails
#16ACCEPTED0.95 sdetails

Code

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Queue;
import java.util.Set;

public class AbandonedWarehouse {

    static int n, m;
    static List<List<Integer>> adj;
    static int[] prev;
    static Queue<Integer> q = new ArrayDeque<>();
    static int startNode = 0;
    static int exitNode = 0;

    static int iix(int i, int j) {
        return i * m + j;
    }

    static boolean bfs() {
        while (!q.isEmpty()) {
            int node = q.poll();
            if (node == exitNode) {
                return true;
            }
            for (int s : adj.get(node)) {
                if (prev[s] == -1) {
                    prev[s] = node;
                    q.add(s);
                }
            }
        }
        return false;
    }

    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

        String[] first = in.readLine().trim().split("\\s+");
        n = Integer.parseInt(first[0]);
        m = Integer.parseInt(first[1]);

        char[][] inpt = new char[n][];
        for (int i = 0; i < n; i++) {
            inpt[i] = in.readLine().toCharArray();
        }

        Set<Character> valid = new HashSet<>(Arrays.asList('.', 'A', 'B'));

        adj = new ArrayList<>(n * m);
        for (int i = 0; i < n * m; i++) {
            adj.add(new ArrayList<>());
        }

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                int ix = iix(i, j);
                if (!valid.contains(inpt[i][j])) {
                    continue;
                }
                if (inpt[i][j] == 'A') {
                    startNode = ix;
                }
                if (inpt[i][j] == 'B') {
                    exitNode = ix;
                }
                if (i + 1 < n && valid.contains(inpt[i + 1][j])) {
                    adj.get(ix).add(iix(i + 1, j));
                }
                if (i - 1 >= 0 && valid.contains(inpt[i - 1][j])) {
                    adj.get(ix).add(iix(i - 1, j));
                }
                if (j + 1 < m && valid.contains(inpt[i][j + 1])) {
                    adj.get(ix).add(iix(i, j + 1));
                }
                if (j - 1 >= 0 && valid.contains(inpt[i][j - 1])) {
                    adj.get(ix).add(iix(i, j - 1));
                }
            }
        }

        prev = new int[n * m];
        Arrays.fill(prev, -1);

        q.add(startNode);
        boolean found = bfs();

        StringBuilder sb = new StringBuilder();
        if (found) {
            sb.append("YES\n");
            int node = exitNode;
            List<Integer> trace = new ArrayList<>();
            trace.add(node);
            while (node != startNode) {
                node = prev[node];
                trace.add(node);
            }
            sb.append(trace.size() - 1).append('\n');

            node = trace.remove(trace.size() - 1);
            StringBuilder out = new StringBuilder();
            while (!trace.isEmpty()) {
                int next = trace.get(trace.size() - 1);
                if (next > node) {
                    if (next == node + 1) {
                        out.append('R');
                    } else {
                        out.append('D');
                    }
                } else {
                    if (next == node - 1) {
                        out.append('L');
                    } else {
                        out.append('U');
                    }
                }
                node = trace.remove(trace.size() - 1);
            }
            sb.append(out).append('\n');
        } else {
            sb.append("NO\n");
        }
        System.out.print(sb);
    }
}

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
RDDDDDLDDDDLDDDDLLLLLLDDLLLDDL...

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:

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

correct output
YES
947
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL...

user output
(empty)

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...