Cod sursa(job #3222579)

Utilizator CosminaneBoac Mihai Cosmin Cosminane Data 10 aprilie 2024 21:41:34
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.86 kb
#include <bits/stdc++.h>
using namespace std;
struct coord{
    int lin, col;
};
int a[105][105], b[105][105], dir[8][2] = { { -1, -1 }, { -1, 0 }, { -1, 1 }, { 0, 1 }, { 1, 1 }, { 1, 0 }, { 1, -1 }, { 0, -1 } };
int main(){
    int n, m, i, j, r1, r2, j1, j2, lin, col, l, c, min;
    string s;
    ifstream fin( "rj.in" );
    ofstream fout( "rj.out" );
    fin >> n >> m;
    fin.get();
    r1 = r2 = j1 = j2 = -1;
    for( i = 0; i < n; i++ ){
        getline( fin, s );
        for( j = 0; j < m; j++ ){
            if( s[j] == 'R' ){
                a[i][j] = 1;
                r1 = i;
                r2 = j;
            }
            else if( s[j] == 'J' ){
                b[i][j] = 1;
                j1 = i;
                j2 = j;
            }
            else if( s[j] == 'X' ){
                a[i][j] = -1;
                b[i][j] = -1;
            }
        }
    }
    queue <coord> q1;
    q1.push( { r1, r2 } );
    while( q1.empty() == false ){
        lin = q1.front().lin;
        col = q1.front().col;
        ///cout << lin << ' ' << col << '\n';
        q1.pop();
        for( i = 0; i < 8; i++ ){
            l = lin + dir[i][0];
            c = col + dir[i][1];
            if( 0 <= l && l < n && 0 <= c && c < m && a[l][c] == 0 ){
                a[l][c] = a[lin][col] + 1;
                q1.push( { l, c } );
            }
        }
    }
    queue <coord> q2;
    q2.push( { j1, j2 } );
    while( q2.empty() == false ){
        lin = q2.front().lin;
        col = q2.front().col;
        q2.pop();
        for( i = 0; i < 8; i++ ){
            l = lin + dir[i][0];
            c = col + dir[i][1];
            if( 0 <= l && l < n && 0 <= c && c < m && b[l][c] == 0 ){
                b[l][c] = b[lin][col] + 1;
                q2.push( { l, c } );
            }
        }
    }
    /**for( i = 0; i < n; i++ ){
        for( j = 0; j < m; j++ ){
            if( a[i][j] == -1 ){
                cout << 'X' << ' ';
            }
            else{
                cout << a[i][j] << ' ';
            }
        }
        cout << '\n';
    }
    cout << '\n';
    for( i = 0; i < n; i++ ){
        for( j = 0; j < m; j++ ){
            if( b[i][j] == -1 ){
                cout << 'X' << ' ';
            }
            else{
                cout << b[i][j] << ' ';
            }
        }
        cout << '\n';
    }*/
    min = -1;
    for( i = 0; i < n; i++ ){
        for( j = 0; j < m; j++ ){
            if( a[i][j] > 0 && a[i][j] == b[i][j] && ( a[i][j] < min || min == -1 ) ){
                min = a[i][j];
            }
        }
    }
    i = 0;
    j = 0;
    while( a[i][j] <= 0 || a[i][j] != b[i][j] || a[i][j] != min ){
        j++;
        if( j == m ){
            i++;
            j = 0;
        }
    }
    fout << a[i][j] << ' ' << i + 1 << ' ' << j + 1;
    return 0;
}