Cod sursa(job #3324355)

Utilizator EricDimiCismaru Eric-Dimitrie EricDimi Data 22 noiembrie 2025 10:06:37
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.12 kb
#include <fstream>
#include <queue>

using namespace std;

ifstream f("rj.in");
ofstream g("rj.out");

const int DMAX = 100;

struct pozitie
{
    short x, y;
};

int N, M;
int Ro[DMAX + 2][DMAX + 2];
int Ju[DMAX + 2][DMAX + 2];
pozitie pRo, pJu;

int tMin = DMAX * DMAX + 1, xMin, yMin;
int d[8][2] = {{0, -1}, {-1, -1}, {-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}};

void citire()
{
    char c;
    f >> N >> M;
    for (int i = 1; i <= N; i++)
    {
        f.get();
        for (int j = 1; j <= M; j++)
        {
            f.get(c);
            switch(c)
            {
            case 'R':
                pRo.x = i;
                pRo.y = j;
                Ro[i][j] = 1;
                break;
            case 'J':
                pJu.x = i;
                pJu.y = j;
                Ju[i][j] = 1;
                break;
            case 'X':
                Ro[i][j] = -1;
                Ju[i][j] = -1;
            }
        }
    }
}

void bordare()
{
    for (int i = 0; i <= N + 1; i++)
        Ro[i][0] = Ro[i][M + 1] = Ju[i][0] = Ju[i][M + 1] = -1;
    for (int i = 1; i <= M; i++)
        Ro[0][i] = Ro[N + 1][i] = Ju[0][i] = Ju[N + 1][i] = -1;
}

void Lee(pozitie pstart, int L[][DMAX + 2])
{
    queue<pozitie> Q;
    pozitie crt, vec;
    Q.push(pstart);
    while (!Q.empty())
    {
        crt = Q.front();
        Q.pop();
        for (int k = 0; k < 8; k++)
        {
            vec.x = crt.x + d[k][0];
            vec.y = crt.y + d[k][1];
            if (L[vec.x][vec.y] == 0)
            {
                L[vec.x][vec.y] = L[crt.x][crt.y] + 1;
                Q.push(vec);
            }
        }
    }
}

int main()
{
    citire();
    bordare();
    Lee(pRo, Ro);
    Lee(pJu, Ju);
    for (int i = 1; i <= N; i++)
        for (int j = 1; j <= M; j++)
            if (Ro[i][j] > 0 && Ro[i][j] == Ju[i][j] && Ro[i][j] < tMin)
            {
                tMin = Ro[i][j];
                xMin = i;
                yMin = j;
            }
    g << tMin << ' ' << xMin << ' ' << yMin;
    f.close();
    g.close();
    return 0;
}