Cod sursa(job #2790498)

Utilizator dcovDarius Covaciu dcov Data 29 octombrie 2021 10:13:13
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.21 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <cstdio>
#define VMAX 2000000000
using namespace std;

FILE *f=fopen("rj.in","r");
ofstream g("rj.out");

queue <pair<int,int>>Q;

int n,m;
int a[105][105],b[105][105];
int di[8]= {-1,-1,0,1,1,1,0,-1};
int dj[8]= {0,1,1,1,0,-1,-1,-1};
int ri,rj,ji,jj;
int t=VMAX;

void bordare()
{
    for(int i=0; i<=n+1; i++)
    {
        a[i][0]=-1;
        a[i][m+1]=-1;

        b[i][0]=-1;
        b[i][m+1]=-1;
    }

    for(int j=0; j<=m+1; j++)
    {
        a[0][j]=-1;
        a[n+1][j]=-1;

        b[0][j]=-1;
        b[n+1][j]=-1;
    }
}

void cit()
{
    fscanf(f,"%d %d\n",&n,&m);

    bordare();

    for(int i=1; i<=n; i++)
    {
        char c[110];

        fgets(c+1,110,f);

        for(int j=1; j<=m; j++)
        {
            if(c[j]=='\n')
                c[j]=' ';

            if(c[j]=='R')
            {
                a[i][j]=1;

                ri=i;
                rj=j;
            }
            else if(c[j]=='J')
            {
                b[i][j]=1;

                ji=i;
                jj=j;
            }
            else if(c[j]=='X')
            {
                a[i][j]=-1;
                b[i][j]=-1;
            }
            else
            {
                a[i][j]=0;
                b[i][j]=0;
            }
        }
    }
}

void lee(int pi, int pj, int a[105][105])
{
    Q.push({pi,pj});

    while(!Q.empty())
    {
        int i=Q.front().first,j=Q.front().second;
        Q.pop();

        for(int v=0; v<8; v++)
        {
            int iv=i+di[v];
            int jv=j+dj[v];

            if(a[iv][jv]==0)
            {
                a[iv][jv]=a[i][j]+1;
                Q.push({iv,jv});
            }
        }
    }
}

int main()
{
    cit();

    lee(ri,rj,a);
    lee(ji,jj,b);

    int pozi,pozj;

    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
            if(a[i][j]==b[i][j] && a[i][j]>0 && a[i][j]<t)
            {
                t=a[i][j];

                pozi=i;
                pozj=j;
            }
        }
    }

    g<<t<<' '<<pozi<<' '<<pozj;

    return 0;
}