Cod sursa(job #3325972)

Utilizator Lucian_info_25Sima Lucian-Stefan Lucian_info_25 Data 27 noiembrie 2025 01:58:23
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.18 kb
#include <fstream>

using namespace std;
const int DMAX=100;

struct pozitie
{
    short x, y;
};
pozitie C[DMAX * DMAX + 1];

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}};

ifstream fin("rj.in");
ofstream fout("rj.out");

void citire()
{
    char c;
    fin >> N >> M;
    for(int i = 1; i <= N; ++i)
    {
        fin.get();
        for(int j = 1; j <= M; ++j)
        {
            fin.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()
{
    int M1 = M + 1, N1 = N + 1;
    for(int j = 0; j <= M1; ++j)
        Ro[0][j] = Ro[N1][j] = Ju[0][j] = Ju[N1][j] = -1;
    for(int i = 0; i <= N1; ++i)
        Ro[i][0] = Ro[i][M1] = Ju[i][0] = Ju[i][M1] = -1;
}

void Lee(pozitie pstart, int L[][DMAX + 2])
{
    pozitie crt, vec;
    int p = 1, u = 1;
    C[1] = pstart;
    while(p <= u)
    {
        crt = C[p++];
        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;
                C[++u] = 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;
            }
    fout << tmin << ' ' << xmin << ' ' << ymin;
    fin.close();
    fout.close();
    return 0;
}