Submission details
Task:Abandoned warehouse
Sender:aalto26bm_042
Submission time:2026-09-07 17:22:27 +0300
Language:C++ (C++20)
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.00 sdetails
#2ACCEPTED0.00 sdetails
#3ACCEPTED0.00 sdetails
#4ACCEPTED0.00 sdetails
#5ACCEPTED0.00 sdetails
#6ACCEPTED0.03 sdetails
#7ACCEPTED0.08 sdetails
#8ACCEPTED0.07 sdetails
#9ACCEPTED0.07 sdetails
#10ACCEPTED0.07 sdetails
#11ACCEPTED0.00 sdetails
#12ACCEPTED0.00 sdetails
#13ACCEPTED0.06 sdetails
#14ACCEPTED0.00 sdetails
#15ACCEPTED0.00 sdetails
#16ACCEPTED0.06 sdetails

Code

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define die(x) return cout << x << endl, 0
#define all(o) o.begin(), o.end()
#define endl '\n'
#define IOS ios::sync_with_stdio(0), cin.tie(0)
#define FILE freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout)
#define SZ(x) ((int)(x).size())
typedef long double ld;
typedef long long ll;
int gcd(int x,int y){ return (!y ? x : gcd(y, x%y)); }
int to_int(string sconvert){stringstream geek(sconvert);int xconvert = 0; geek >> xconvert; return xconvert;}
const int MAXN=2000+30,MAX_LOG=40,INF=1e18+10,MOD=1e9+7;
const double PI = acos(-1);
int mod(int x) { return (x % MOD + MOD) % MOD; }
int power(int x,int y){
    if(y==0)return 1;
    int c=power(x,y/2);
    c=(c*c)%MOD;
    if(y%2)c=(c*x)%MOD;
    return c;
}

int n;
int a[MAXN];

// vector<int> g[MAXN];
// int visited[MAXN];
// int color[MAXN];
// int max_color = 1;
// int is_impossible = 0;

// vector<pair<int,int>> edges;
// int dfs(int v, int root){
//     visited[v]=1;

//     int ones = 0;
//     int twos = 0;
//     int is_leaf = 1;
//     for(int u:g[v]){
//         // cout <<v<<"pp pp"<<u<<" " <<visited[u]<<endl;
//         if(!visited[u]){
//             is_leaf = 0;
//             int c = dfs(u, root);
//             if (c == 1) ones++;
//             else twos ++;
//         }
//         else{
//             int c = color [u];
//             // cout <<c<<endl;
//             if (c != 0){
//                 if (c == 1) ones++;
//                 else twos ++; 
//             }
//         }
//     }

//     if(is_leaf){
//         // cout<<v<<" kk"<<g[v].size()<<endl;

//         color[v] = 1;
//         return 1;
//     }

//     // cout<<ones<<" "<<twos<<"--- "<<v<<endl;
//     if (ones>0 && twos >0){
//         is_impossible=1;
//         return 1;
//     }
//     else if (ones>=0){
//         color[v]=2;
//         return 2;
//     }
//     else{
//         color[v]=1;
//         return 1;
//     }
// }



const int dx[4] = {1, -1, 0, 0};
const int dy[4] = {0, 0, 1, -1};
const char dir[4] = {'D', 'U', 'R', 'L'};
// vector<string> grid[MAXN];

int MAIN(){
    int n, m;
    cin>>n>>m;
    vector<string> grid(n);

    int sr = -1, sc = -1, br = -1, bc = -1;

    for (int i = 0; i < n; ++i) {
        cin>>grid[i];
        for (int j = 0; j < m; ++j) {
            if (grid[i][j] == 'A') {
                sr = i;
                sc = j;
            } 
            else if (grid[i][j] == 'B') {
                br = i;
                bc = j;
            }
        }
    }

    vector<vector<int>> dist(n, vector<int>(m, -1));
    vector<vector<pair<int, int>>> parent(n, vector<pair<int, int>>(m, {-1, -1}));
    vector<vector<char>> moveto(n, vector<char>(m, '?'));
    queue<pair<int, int>> q;

    q.push({sr, sc});
    dist[sr][sc] = 0;

    while (!q.empty()) {
        auto [r, c] = q.front();
        q.pop();

        for (int k = 0; k < 4; ++k) {
            int nr= r + dx[k];
            int nc=c+dy[k];
            if (nr < 0 || nr >= n || nc < 0 || nc >= m) continue;
            if (grid[nr][nc] == '#')continue;
            if (dist[nr][nc] != -1)continue;

            dist[nr][nc] = dist[r][c] + 1;
            parent[nr][nc] = {r, c};
            moveto[nr][nc] = dir[k];
            q.push({nr, nc});
        }
    }

    if (dist[br][bc] == -1) {
        cout << "NO\n";
        return 0;
    }

    cout<<"YES"<<endl;
    cout<<dist[br][bc]<<endl;

    string path;
    int r = br, c = bc;
    while (r != sr || c != sc) {
        path.push_back(moveto[r][c]);
        auto [pr, pc] = parent[r][c];
        r = pr;
        c = pc;
    }
    reverse(path.begin(), path.end());
    cout<<path<<endl;

    
    return 0;
}
int32_t main(){
    IOS;
    int t=1;
    // cin>>t;
    while(t--)MAIN();
    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
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: 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...