Cod sursa(job #2261551)

Utilizator andreiomd1Onut Andrei andreiomd1 Data 16 octombrie 2018 12:56:12
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.35 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX=105;

int R[NMAX][NMAX], J[NMAX][NMAX], N, M, i, j;

int XR, YR, XJ, YJ;

int X, Y, XX, YY;

int p, u, t;

int ans=INT_MAX, linie, coloana;

int dx[8]= {-1, -1, 0, 1, 1, 1, 0, -1};
int dy[8]= {0, 1, 1, 1, 0, -1, -1, -1};

char S[NMAX], c;

struct punct
{
    int X, Y;
};

punct Q[NMAX*NMAX];

int main()
{
    f>>N>>M;

    f.get(c);

    for(i=1; i<=N; i++)
    {
        f.getline(S, 101);

        for(j=0; j<M; j++)
            if(S[j]=='R')
            {
                XR=i;
                YR=j+1;

                R[i][j+1]=1;
            }
            else if(S[j]=='J')
            {
                XJ=i;
                YJ=j+1;

                J[i][j+1]=1;
            }
            else if(S[j]=='X')
            {
                R[i][j+1]=J[i][j+1]=-1;
            }
    }

    for(i=0; i<=M+1; i++)
        R[0][i]=R[N+1][i]=J[0][i]=J[N+1][i]=-1;

    for(i=1; i<=N; i++)
        R[i][0]=R[i][M+1]=J[i][0]=J[i][M+1]=-1;

    //g<<XR<<' '<<YR<<' '<<XJ<<' '<<YJ<<'\n';

    //Lee Romeo:
    p=u=1;

    Q[1].X=XR;
    Q[1].Y=YR;

    while(p<=u)
    {
        X=Q[p].X;
        Y=Q[p].Y;

        for(t=0; t<8; t++)
        {
            XX=X+dx[t];
            YY=Y+dy[t];

            if(R[XX][YY]==0)
            {
                R[XX][YY]=R[X][Y]+1;

                u++;

                Q[u].X=XX;
                Q[u].Y=YY;
            }
        }

        p++;
    }

    //Lee Julieta:
    p=u=1;

    Q[1].X=XJ;
    Q[1].Y=YJ;

    while(p<=u)
    {
        X=Q[p].X;
        Y=Q[p].Y;

        for(t=0; t<8; t++)
        {
            XX=X+dx[t];
            YY=Y+dy[t];

            if(J[XX][YY]==0)
            {
                J[XX][YY]=J[X][Y]+1;

                u++;

                Q[u].X=XX;
                Q[u].Y=YY;
            }
        }

        p++;
    }

    for(i=1; i<=N; i++)
        for(j=1; j<=M; j++)
            if(R[i][j]==J[i][j] && R[i][j]>0)
            {
                if(R[i][j]<ans)
                {
                    ans=R[i][j];

                    linie=i;
                    coloana=j;
                }
            }

    g<<ans<<' '<<linie<<' '<<coloana<<'\n';

    return 0;
}