Submission details
Task:Abandoned warehouse
Sender:aalto26bm_028
Submission time:2026-09-07 16:44:34 +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.06 sdetails
#7ACCEPTED0.07 sdetails
#8ACCEPTED0.07 sdetails
#9ACCEPTED0.08 sdetails
#10ACCEPTED0.08 sdetails
#11ACCEPTED0.00 sdetails
#12ACCEPTED0.00 sdetails
#13ACCEPTED0.07 sdetails
#14ACCEPTED0.00 sdetails
#15ACCEPTED0.00 sdetails
#16ACCEPTED0.08 sdetails

Code

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <map>
#include <set>
#include <queue>
#include <cmath>

using namespace std;

using ll  = long long;
using vi  = vector<int>;
using vc = vector<char>;
using vll = vector<long long>;
using vs  = vector<string>;
using vb = vector<bool>;
using vvi  = vector<vector<int>>;
using vvll = vector<vector<long long>>;
using vvc  = vector<vector<char>>;
using vvb  = vector<vector<bool>>;
using pii = pair<int, int>;


#define all(x) (x).begin(), (x).end()
#define pb push_back
#define sz(x) ((int)(x).size())
#define forn(i, n) for (int i = 0; i < (n); ++i)

using namespace std;

int dr[] = {-1, 1, 0, 0};
int dc[] = {0, 0, -1, 1};
char dir[] = {'U', 'D', 'L', 'R'};
int n, m;

bool pos_ok(int a, int b){
  return a >= 0 and a < n and b >= 0 and b < m;
}

int main(){
  cin >> n >> m;
  vvc grid(n, vc(m, 0));

  pii start, end;
  forn(i, n){
    forn(j, m){
      cin >> grid[i][j];
      if(grid[i][j] == 'A') start = {i, j};
      if(grid[i][j] == 'B') end = {i, j};
    }
  } 

  vvc parents(n, vc(m,0));

  queue<pii> q;
  q.push(start);
  grid[start.first][start.second] = '#';
  bool found = false;
  
  while(! q.empty()){
    auto [x,y] = q.front();
    q.pop();

    if(x == end.first and y == end.second){
      found = true;
      break;
    }

    forn(i,4){
      int nx = x + dr[i];
      int ny = y + dc[i];

      if(pos_ok(nx, ny) and grid[nx][ny] != '#'){
        grid[nx][ny] = '#';
        parents[nx][ny] = dir[i];
        q.push({nx,ny});
      }
    }
  }

  if(not found){
    cout << "NO" << endl;
    return 0;
  } 

  int curr_x = end.first;
  int curr_y = end.second;
  string path;

  while(curr_x != start.first or curr_y != start.second){
    char d = parents[curr_x][curr_y];
    path.pb(d);
    forn(i, 4){
      if(dir[i] == d){
        curr_x -= dr[i];
        curr_y -= dc[i];
        break;
      }
    }
  }

  reverse(all(path));

  cout << "YES" << endl << sz(path) << endl;
  cout << path << endl;
}

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