Cod sursa(job #2559460)

Utilizator robertrRotaru Stefan Robert robertr Data 27 februarie 2020 12:35:11
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.62 kb
#include <fstream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int xr,yr,xj,yj,n,m,tmin,xsol,ysol,R[105][105],J[105][105];
int dx[9]={-1,-1,0,1,1,1,0,-1};
int dy[9]={0,1,1,1,0,-1,-1,-1};
char o[105][105];
struct punct
{
    int x,y;
}coada[100005];
inline bool inside(int i,int j)
{
    return i>=1&&i<=n&&j>=1&&j<=m;
}
void lee(int x,int y,int v[105][105])
{
    int prim,ultim;
    prim=ultim=1;
    coada[ultim].x=x,coada[ultim].y=y;
    while(prim<=ultim)
    {
        int i=coada[prim].x,j=coada[prim].y;
        for(int k=0;k<=7;++k)
        {
            int inou=i+dx[k],jnou=j+dy[k];
            if(inside(i,j)&&o[inou][jnou]==' '&&v[inou][jnou]>v[i][j]+1)
            {
                v[inou][jnou]=v[i][j]+1;
                coada[++ultim].x=inou;
                coada[ultim].y=jnou;
            }
        }
        prim++;
    }
}
void read()
{
    f>>n>>m;
    f.get();
    for(int i=1;i<=n;++i)
        f.getline(o[i]+1,105);
    for(int i=1;i<=n;++i)
        for(int j=1;j<=m;++j)
    {
        if(o[i][j]=='R') xr=i,yr=j;
        if(o[i][j]=='J') xj=i,yj=j;
    }
}
void solve()
{
    read();
    tmin=(1<<30);
    for(int i=1;i<=n;++i)
        for(int j=1;j<=m;++j)
            R[i][j]=J[i][j]=(1<<30);
    R[xr][yr]=J[xj][yj]=0;
    lee(xr,yr,R);
    lee(xj,yj,J);
    for(int i=1;i<=n;++i)
        for(int j=1;j<=m;++j)
    {
        if(R[i][j]==J[i][j])
        {
            if(tmin>R[i][j])
                tmin=R[i][j],xsol=i,ysol=j;
        }
    }
    g<<tmin+1<<" "<<xsol<<" "<<ysol<<'\n';
}
int main()
{
    solve();
    return 0;
}