ego_for_success's blog

By ego_for_success, history, 6 hours ago, In English
#include <bits/stdc++.h>
#define ll long long
#define endl "\n"
using namespace std;

int n, m;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    
    cin >> n >> m;
    vector<vector<char>> v(n, vector<char>(m));
    vector<vector<int>> vis(n, vector<int>(m, 0));
    vector<vector<pair<int, int>>> par(n, vector<pair<int, int>>(m, {-1, -1}));

    pair<int, int> st, ed;

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> v[i][j];
            if (v[i][j] == 'A') {
                st = {i, j};
            }
            if (v[i][j] == 'B') {
                ed = {i, j};
            }
        }
    }

    queue<pair<int, int>> q;
    q.push(st);
    vis[st.first][st.second] = 1;

    while (!q.empty()) {
        int x = q.front().first;
        int y = q.front().second;
        q.pop();

        if (x == ed.first && y == ed.second) break;

        for (auto [dx, dy, dir] : vector<tuple<int, int, char>>{{1, 0, 'D'}, {-1, 0, 'U'}, {0, 1, 'R'}, {0, -1, 'L'}}) {
            int nx = x + dx, ny = y + dy;
            if (nx >= 0 && ny >= 0 && nx < n && ny < m && (v[nx][ny] == 'B' || v[nx][ny] == '.') && !vis[nx][ny]) {
                q.push({nx, ny});
                par[nx][ny] = {x, y};
                vis[nx][ny] = 1;
            }
        }
    }

    if (!vis[ed.first][ed.second]) {
        cout << "NO" << endl;
    } else {
        cout << "YES" << endl;
        vector<char> ans;
        int x = ed.first, y = ed.second;

        while (x != st.first || y != st.second) {
            auto [a, b] = par[x][y];
            if (x > a) ans.push_back('D');
            else if (x < a) ans.push_back('U');
            else if (y > b) ans.push_back('R');
            else if (y < b) ans.push_back('L');
            x = a; y = b;
        }
        reverse(ans.begin(), ans.end());
        cout << ans.size() << endl;
        for (auto it : ans) cout << it;
        cout << endl;
    }

    return 0;
}

`#include <bits/stdc++.h>

define ll long long

define endl "\n"

using namespace std;

int n, m;

int main() { ios_base::sync_with_stdio(false); cin.tie(NULL);

cin >> n >> m;
vector<vector<char>> v(n, vector<char>(m));
vector<vector<int>> vis(n, vector<int>(m, 0));
vector<vector<pair<int, int>>> par(n, vector<pair<int, int>>(m, {-1, -1}));

pair<int, int> st, ed;

for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        cin >> v[i][j];
        if (v[i][j] == 'A') {
            st = {i, j};
        }
        if (v[i][j] == 'B') {
            ed = {i, j};
        }
    }
}

queue<pair<int, int>> q;
q.push(st);
vis[st.first][st.second] = 1;

while (!q.empty()) {
    int x = q.front().first;
    int y = q.front().second;
    q.pop();

    if (x == ed.first && y == ed.second) break;

    for (auto [dx, dy, dir] : vector<tuple<int, int, char>>{{1, 0, 'D'}, {-1, 0, 'U'}, {0, 1, 'R'}, {0, -1, 'L'}}) {
        int nx = x + dx, ny = y + dy;
        if (nx >= 0 && ny >= 0 && nx < n && ny < m && (v[nx][ny] == 'B' || v[nx][ny] == '.') && !vis[nx][ny]) {
            q.push({nx, ny});
            par[nx][ny] = {x, y};
            vis[nx][ny] = 1;
        }
    }
}

if (!vis[ed.first][ed.second]) {
    cout << "NO" << endl;
} else {
    cout << "YES" << endl;
    vector<char> ans;
    int x = ed.first, y = ed.second;

    while (x != st.first || y != st.second) {
        auto [a, b] = par[x][y];
        if (x > a) ans.push_back('D');
        else if (x < a) ans.push_back('U');
        else if (y > b) ans.push_back('R');
        else if (y < b) ans.push_back('L');
        x = a; y = b;
    }
    reverse(ans.begin(), ans.end());
    cout << ans.size() << endl;
    for (auto it : ans) cout << it;
    cout << endl;
}

return 0;

} `

Full text and comments »

  • Vote: I like it
  • -2
  • Vote: I do not like it