Cod sursa(job #3297177)

Utilizator CC2023Cezar Cirjau CC2023 Data 21 mai 2025 20:53:08
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.75 kb
#include <bits/stdc++.h>

using namespace std ;

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

struct casuta
{
    int i, j ;
} ;

int lin [ 8 ] = { -1, -1, 0, 1, 1, 1, 0, -1 }, col [ 8 ] = { 0, 1, 1, 1, 0, -1, -1, -1 }, a [ 102 ] [ 102 ], d1 [ 102 ] [ 102 ], d2 [ 102 ] [ 102 ] ;
int n, m, i, j, nrc1 = 1, ic1, nrc2 = 1, ic2, mini = 10001, minii, minij ;
casuta coada1 [ 10001 ], coada2 [ 10001 ], elc ;
char c ;

int main ( )
{
    fin >> n >> m ;

    fin . get ( c ) ;

    for ( i = 1 ; i <= n ; i ++ )
    {
        for ( j = 1 ; j <= m + 1 ; j ++ )
        {
            fin . get ( c ) ;

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

            else if ( c == 'R' )
            {
                d1 [ i ] [ j ] = 1 ;
                coada1 [ 0 ] . i = i ;
                coada1 [ 0 ] . j = j ;
            }

            else if ( c == 'J' )
            {
                d2 [ i ] [ j ] = 1 ;
                coada2 [ 0 ] . i = i ;
                coada2 [ 0 ] . j = j ;
            }
        }
    }

    for ( i = 0 ; i <= n + 1 ; i ++ )
    {
        a [ i ] [ 0 ] = 1 ;
        a [ i ] [ m + 1 ] = 1 ;
    }


    for ( i = 0 ; i <= m + 1 ; i ++ )
    {
        a [ 0 ] [ i ] = 1 ;
        a [ n + 1 ] [ i ] = 1 ;
    }

    while ( ic1 < nrc1 )
    {
        elc = coada1 [ ic1 ] ;

        for ( int dir = 0 ; dir < 8 ; dir ++ )
        {
            i = elc . i + lin [ dir ] ;
            j = elc . j + col [ dir ] ;

            if ( a [ i ] [ j ] == 0 && d1 [ i ] [ j ] == 0 )
            {
                d1 [ i ] [ j ] = d1 [ elc . i ] [ elc . j ] + 1 ;
                coada1 [ nrc1 ] . i = i ;
                coada1 [ nrc1 ] . j = j ;
                nrc1 ++ ;
            }
        }

        ic1 ++ ;
    }

    while ( ic2 < nrc2 )
    {
        elc = coada2 [ ic2 ] ;

        for ( int dir = 0 ; dir < 8 ; dir ++ )
        {
            i = elc . i + lin [ dir ] ;
            j = elc . j + col [ dir ] ;

            if ( a [ i ] [ j ] == 0 && d2 [ i ] [ j ] == 0 )
            {
                d2 [ i ] [ j ] = d2 [ elc . i ] [ elc . j ] + 1 ;
                coada2 [ nrc2 ] . i = i ;
                coada2 [ nrc2 ] . j = j ;
                nrc2 ++ ;
            }
        }

        ic2 ++ ;
    }

    for ( int i = 1 ; i <= n ; i ++ )
    {
        for ( int j = 1 ; j <= m ; j ++ )
        {
            if ( d1 [ i ] [ j ] == d2 [ i ] [ j ] && d1 [ i ] [ j ] < mini && d1 [ i ] [ j ] )
            {
                mini = d1 [ i ] [ j ] ;
                minii = i ;
                minij = j ;
            }
        }
    }

    fout << mini << " " << minii << " " << minij ;

    return 0 ;
}