Cod sursa(job #3360197)

Utilizator Nicholas123Tudose Nicholas Nicholas123 Data 10 iulie 2026 11:29:27
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.23 kb
#include <fstream>
#include <queue>
using namespace std;

ifstream cin("rj.in");
ofstream cout("rj.out");

char a[101][101];
int r[101][101], j[101][101];
int i, l, n, m, x, y, t = 999999;
int dx[] = { -1,-1,-1,0,0,1,1,1 };
int dy[] = { -1,0,1,-1,1,-1,0,1 };

struct Nod
{
    int x, y, v;
};

queue<Nod> b;
queue<Nod> c;

int main()
{
    cin >> n >> m;

    for (i = 1; i <= n; i++)
        for (l = 1; l <= m; l++)
            r[i][l] = j[i][l] = -1;

    cin.ignore();

    for (i = 1; i <= n; i++)
    {
        cin.getline(a[i] + 1, 101);

        for (l = 1; l <= m; l++)
        {
            if (a[i][l] == 'R')
            {
                b.push({ i, l, 0 });
                r[i][l] = 0;
            }

            if (a[i][l] == 'J')
            {
                c.push({ i, l, 0 });
                j[i][l] = 0;
            }
        }
    }

    while (!b.empty())
    {
        Nod p = b.front();
        b.pop();

        for (int d = 0; d < 8; d++)
        {
            int nx = p.x + dx[d];
            int ny = p.y + dy[d];

            if (nx >= 1 && nx <= n &&
                ny >= 1 && ny <= m &&
                a[nx][ny] != 'X' &&
                r[nx][ny] == -1)
            {
                r[nx][ny] = p.v + 1;
                b.push({ nx, ny, p.v + 1 });
            }
        }
    }

    while (!c.empty())
    {
        Nod p = c.front();
        c.pop();

        for (int d = 0; d < 8; d++)
        {
            int nx = p.x + dx[d];
            int ny = p.y + dy[d];

            if (nx >= 1 && nx <= n &&
                ny >= 1 && ny <= m &&
                a[nx][ny] != 'X' &&
                j[nx][ny] == -1)
            {
                j[nx][ny] = p.v + 1;
                c.push({ nx, ny, p.v + 1 });
            }
        }
    }

    for (i = 1; i <= n; i++)
    {
        for (l = 1; l <= m; l++)
        {
            if (r[i][l] == j[i][l] && r[i][l] != -1)
            {
                if (r[i][l] < t)
                {
                    t = r[i][l];
                    x = i;
                    y = l;
                }
            }
        }
    }

    cout << t+1 << ' ' << x << ' ' << y;

    return 0;
}