Cod sursa(job #3293729)

Utilizator mircea1112Mircea Serban Andrei mircea1112 Data 12 aprilie 2025 13:51:53
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.05 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

const int DMAX=1000;

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, 0}, {0, 1}, {1, 0}, {-1, -1}, {-1, 1}, {1, 1}, {1, -1}};

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


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()
{
    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;
            }
    g<<tmin<<' '<<xmin<<' '<<ymin;

    f.close();
    g.close();
    return 0;
}