Cod sursa(job #2595080)

Utilizator raduandreiRadu Andrei raduandrei Data 7 aprilie 2020 00:34:29
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.87 kb
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");

int a[105][105],b[105][105],n,m,xR,yR,xJ,yJ;
struct coord
{
    int x,y;
}v[105*105];
void citire()
{  char c[105];
    in>>n>>m;


    for(int i=0; i<=n; ++i)
    {in.getline(c+1,105);

        for(int j=1; j<=m; ++j)
    {
        if(c[j]=='R')      xR=i,yR=j,a[xR][yR]=b[xR][yR]=1;
        else if(c[j]=='J') xJ=i,yJ=j,a[xJ][yJ]=b[xJ][yJ]=1;
        else if(c[j]=='X') a[i][j]=b[i][j]=-1;

    }
    }
}
int interior(int x, int y)
{
    return (x>=1&&y>=1&&x<=n&&y<=m);
}


int dx[]={0,1,1,1,0,-1,-1,-1};
int dy[]={1,1,0,-1,-1,-1,0,1};
void leeRomeo()
{
  int st,dr;
  st=dr=1;
  v[1].x=xR;
  v[1].y=yR;
  while(st<=dr)
  {

      for(int i=0; i<=7; ++i)
      {
          int newx=dx[i]+v[st].x;
          int newy=dy[i]+v[st].y;
          if(interior(newx,newy)&&a[newx][newy]==0)
          {
              dr++;
              v[dr].x=newx;
              v[dr].y=newy;
              a[newx][newy]=1+a[v[st].x][v[st].y];
          }
      }
      st++;
  }

}


void leeJulieta()
{
  int st,dr;
  st=dr=1;
  v[1].x=xJ;
  v[1].y=yJ;
  while(st<=dr)
  {

      for(int i=0; i<=7; ++i)
      {
          int newx=dx[i]+v[st].x;
          int newy=dy[i]+v[st].y;
          if(interior(newx,newy)&&b[newx][newy]==0)
          {
              dr++;
              v[dr].x=newx;
              v[dr].y=newy;
              b[newx][newy]=1+b[v[st].x][v[st].y];
          }
      }
      st++;
  }

}

int main()
{   int min=999999;
    citire();
    leeRomeo();
    leeJulieta();

    for(int i=1; i<=n; ++i)
        for(int j=1; j<=m; ++j)
        if(a[i][j]<min&&a[i][j]>1&&a[i][j]==b[i][j])
        {min=a[i][j];
        xR=i;
        yR=j;
        }
    out<<min<<" "<<xR<<" "<<yR;

    return 0;
}