Cod sursa(job #2206939)

Utilizator Alex_BubBuburuzan Alexandru Alex_Bub Data 24 mai 2018 15:56:31
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.9 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 100;

int r[NMAX + 5][NMAX + 5], j[NMAX + 5][NMAX + 5];

int n, m, dl[8] = {-1, -1, -1, 0, 1, 1, 1, 0}, dc[8] = {-1, 0, 1, 1, 1, 0, -1, -1};

queue< pair<int, int> > qr, qj;

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

void read(int l) {
    string s;

    getline(fin, s);

    int c = 1;

    for(string :: iterator it = s.begin(); it < s.end(); it++, c++) {
        if(*it == 'R')
            qr.push({l, c}), r[l][c] = 1;

        if(*it == 'J')
            qj.push({l, c}), j[l][c] = 1;

        if(*it == 'X')
            r[l][c] = j[l][c] = -1;
    }

    while(c <= m) r[l][c] = 0, j[l][c] = 0, c++;
}

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

    fin.get();

    for(int l = 1; l <= n; l++) read(l);

    fin.close();

    while(!qr.empty()) {
        for(int i = 0; i < 8; i++) {
            int l = qr.front().first, c = qr.front().second;

            int x = l + dl[i], y = c + dc[i];

            if(!r[x][y] && valid(x, y)) {
                qr.push({x, y});
                r[x][y] = r[l][c] + 1;
            }
        }
        qr.pop();
    }

    while(!qj.empty()) {
        for(int i = 0; i < 8; i++) {
            int l = qj.front().first, c = qj.front().second;

            int x = l + dl[i], y = c + dc[i];

            if(!j[x][y] && valid(x, y)) {
                qj.push({x, y});
                j[x][y] = j[l][c] + 1;
            }
        }
        qj.pop();
    }

    int mini = INT_MAX, li, ci;

    for(int l = 1; l <= n; l++) {
        for(int c = 1; c <= m; c++) {
            if(r[l][c] == j[l][c] && r[l][c] != -1 && r[l][c] != 0 && r[l][c] < mini)
                mini = r[l][c], li = l, ci = c;
        }
    }

    fout << mini << " " << li << " " << ci;

    fout.close();

    return 0;
}