Cod sursa(job #2963431)

Utilizator nnmadalinNeauna Madalin nnmadalin Data 11 ianuarie 2023 08:39:36
Problema Rj Scor 50
Compilator cpp-64 Status done
Runda pregatire_oji_1_2022 Marime 2.03 kb
#include <bits/stdc++.h>
using namespace std;

const string file_name = "rj";
ifstream fin(file_name + ".in");
ofstream fout(file_name + ".out");

int n, m, ri, rj, ji, jj;
int ro[101][101], ju[101][101];


void debug(int mat[][101]){
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= m; j++){
            cout << mat[i][j] << " ";
        }
        cout << "\n";
    }
    cout << "\n\n\n";
}

int dx[] = {-1, -1, 0, 1, 1, 1, 0, -1},
    dy[] = {0, 1, 1 ,1, 0, -1, -1, -1};




bool inmat(int i, int j){
    return (i >= 1 && i <= n && j >= 1 && j <= m);
}

void lee(int x, int y, int ro[][101]){
    queue <pair<int, int>> q;
    q.push(make_pair(x, y));
    while(!q.empty()){
        int i = q.front().first;
        int j = q.front().second;
        for(int d = 0; d < 8; d++){
            int in = i + dy[d],
                jn = j + dx[d];
            if(inmat(in, jn) && ro[in][jn] == 0){
                ro[in][jn] = ro[i][j] + 1;
                q.push(make_pair(in, jn));
            }
        }
        q.pop();
    }
    ro[x][y] = 0;
}


int main(){
    char arr[120];
    fin >> n >> m;
    fin.getline(arr, 1);
    for(int i = 1; i <= n; i++){
        fin.getline(arr, 100);
        for(int j = 0; j < strlen(arr); j++){
            if(arr[j] == 'X'){
                ro[i][j+1] = -1;
                ju[i][j+1] = -1;
            }

            else if(arr[j] == 'R'){
                ri = i;
                rj = j + 1;
            }
            else if(arr[j] == 'J'){
                ji = i;
                jj = j + 1;
            }
        }
    }

    lee(ri, rj, ro);
    lee(ji, jj, ju);

    int mini = 2e9, a = 0, b = 0;

    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= m; j++){
            if(ro[i][j] < mini && ro[i][j] == ju[i][j] && ro[i][j] > 0){
                mini = ro[i][j];
                a = i;
                b = j;
            }
        }
    }
    fout << mini + 1 << " " << a << " " << b;




    return 0;

}