Cod sursa(job #3281610)

Utilizator Octavian09Dore Octaviam Octavian09 Data 2 martie 2025 17:48:47
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.18 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <iomanip>

using namespace std;
const int NMAX=100;

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

int N,M,dmin=NMAX*NMAX,dx,dy;
int LJ[NMAX+2][NMAX+2];
int LR[NMAX+2][NMAX+2];
int d[8][2] = {{1,0},{0,1},{-1,0},{0,-1},{1,1},{-1,-1},{-1,1},{1,-1}};

struct pozitie{
    int x,y;
};

pozitie pJ,pR;

queue<pozitie> C;

void citire(){
    char c;
    f >> N >> M;
    f.ignore();
    for(int i=1;i<=N;i++){
        for(int j=1;j<=M;j++){
            f.get(c);
            if(c=='X') LJ[i][j]=LR[i][j]=-1;
            else if(c=='R'){
                pR.x=i;
                pR.y=j;
                LR[i][j]=1;
            }
            else if(c=='J'){
                pJ.x=i;
                pJ.y=j;
                LJ[i][j]=1;
            }
        }
        f.ignore();
    }
}

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

void LeeJ(){
    pozitie crt,vec;
    C.push(pJ);
    while(!C.empty()){
        crt=C.front();
        C.pop();
        for(int k=0;k<8;k++){
            vec.x=crt.x+d[k][0];
            vec.y=crt.y+d[k][1];
            if(LJ[vec.x][vec.y]==0){
                LJ[vec.x][vec.y]=LJ[crt.x][crt.y]+1;
                C.push(vec);
            }
        }
    }
}

void LeeR(){
    pozitie crt,vec;
    C.push(pR);
    while(!C.empty()){
        crt=C.front();
        C.pop();
        for(int k=0;k<8;k++){
            vec.x=crt.x+d[k][0];
            vec.y=crt.y+d[k][1];
            if(LR[vec.x][vec.y]==0){
                LR[vec.x][vec.y]=LR[crt.x][crt.y]+1;
                C.push(vec);
            }
        }
    }
}

void parcurgere(){
    for(int i=1;i<=N;i++)
        for(int j=1;j<=M;j++)
            if(LJ[i][j]==LR[i][j] && LJ[i][j]>0 && LJ[i][j]<dmin){
                dmin=LJ[i][j];
                dx=i;
                dy=j;
            }
}

int main()
{
    citire();
    bordare();
    LeeJ();
    LeeR();
    parcurgere();
    g << dmin << ' ' << dx << ' ' << dy;
    return 0;
}