Cod sursa(job #3292755)

Utilizator oliviamMarin Olivia oliviam Data 9 aprilie 2025 10:44:30
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.97 kb
#include <iostream>
#include <fstream>
#include <queue>

using namespace std;
const int DMAX=100;

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

struct pozitie
{
    short x,y;
};

int M,N,Ro[DMAX+2][DMAX+2],Ju[DMAX+2][DMAX+2];
int p,u;

pozitie pRo;
pozitie 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 bordare()
{
    int N1=N+1, M1=M+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 ps, int L[][DMAX+2])
{
    queue<pozitie> Q;
    pozitie crt, vec;
    Q.push(ps);
    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);
            }
        }
    }
}

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

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]==Ju[i][j] && Ro[i][j]<tmin && Ro[i][j]>0)
                tmin=Ro[i][j], xmin=i, ymin=j;
    g<<tmin<<' '<<xmin<<' '<<ymin;
    f.close();
    g.close();
    return 0;
}