Cod sursa(job #2719415)

Utilizator marian_tudormarian tudor-stefan marian_tudor Data 9 martie 2021 20:21:55
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.08 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("rj.in");
ofstream fout("rj.out");

int n,m,ar[100][100],aj[100][100];

struct cord
{
    int x=-1,y;
}cr[101],cj[101];

void citire()
{
    char x[100];
    fin.getline(x,0);
    for(int i=0;i<n;i++)
    {
     fin.getline(x,100);
     for(int j=0;j<m;j++)
     {
      if(x[j]=='X') ar[i][j]=aj[i][j]=-1;
      if(x[j]=='R') cr[1].x=i,cr[1].y=j,ar[i][j]=1;
      if(x[j]=='J') cj[1].x=i,cj[1].y=j,aj[i][j]=1;
     }
    }
}

void el(cord v[],int &n)
{
    int i;
    for(i=1,n--;i<=n;i++) v[i]=v[i+1];
}

void Lee()
{
    int i,j,x,y,d,lr=1,lj=1;
    for(d=1;lr&&lj;d++)
    {
     while(lr&&ar[cr[1].x][cr[1].y]==d)
     {
      for(i=-1;i<2;i++) for(j=-1;j<2;j++)
      {
       if(!i&&!j) continue;
       x=cr[1].x+i,y=cr[1].y+j;
       if(x>=0&&y>=0&&x<n&&y<m) if(aj[x][y]==d)
       {
        for(int k=1;k<=lr;k++) if(abs(x-cr[k].x)<2&&abs(y-cr[k].y<2))
        {
         fout<<d+1<<' '<<x+1<<' '<<y+1;
         return;
        }
       }
       else if(!ar[x][y]) cr[++lr].x=x,cr[lr].y=y,ar[x][y]=ar[cr[1].x][cr[1].y]+1;
      }
      el(cr,lr);
     }
     while(lj&&aj[cj[1].x][cj[1].y]==d)
     {
      for(i=-1;i<2;i++) for(j=-1;j<2;j++)
      {
       if(!i&&!j) continue;
       x=cj[1].x+i,y=cj[1].y+j;
       if(x>=0&&y>=0&&x<n&&y<m) if(ar[x][y]==d+1)
       {
        fout<<d+1<<' '<<x+1<<' '<<y+1;
        return;
       }
       else if(ar[x][y]==d)
       {
        for(int k=1;k<=lj;k++) if(abs(x-cj[k].x)<2&&abs(y-cj[k].y<2))
        {
         fout<<d+1<<' '<<x+1<<' '<<y+1;
         return;
        }
       }
       else if(!aj[x][y]) cj[++lj].x=x,cj[lj].y=y,aj[x][y]=aj[cj[1].x][cj[1].y]+1;
      }
      el(cj,lj);
     }
    }
}

int main()
{
    fin>>n>>m;
    citire();
    Lee();//for(int i=0;i<n;i++) {for(int j=0;j<m;j++) {if(ar[i][j]>=0) cout<<' ';cout<<ar[i][j]<<' ';}cout<<endl;}
    //cout<<endl;for(int i=0;i<n;i++) {for(int j=0;j<m;j++) {if(aj[i][j]>=0) cout<<' ';cout<<aj[i][j]<<' ';}cout<<endl;}
    return 0;
}