Cod sursa(job #3308423)

Utilizator mihai.25Calin Mihai mihai.25 Data 24 august 2025 19:34:04
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <fstream>

#include <string>

#include <queue>

using namespace std;

ifstream fin ("rj.in");

ofstream fout ("rj.out");

int n, m;

char mat[101][101];

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

bool in_mat (int i, int j) {

	return i >= 1 && i <= n && j >= 1 && j <= m;
}

void lee (int istart, int jstart, int cnt[][101]) {

	queue<pair<int, int>> q;

	q.push({istart, jstart});

	cnt[istart][jstart] = 1;

	while (!q.empty()) {

		pair<int, int> x = q.front();

		q.pop();

		for (int d = 0; d < 8; ++d) {

			int i = x.first + dx[d], j = x.second + dy[d];

			if (in_mat (i, j) && mat[i][j] == ' ' && cnt[i][j] == 0) {

				cnt[i][j] = cnt[x.first][x.second] + 1;

				q.push({i, j});
			}
		}
	}
}

int main () {

	fin >> n >> m;

	fin.get();

	for (int i = 1; i <= n; ++i) {
		
		string s;

		getline (fin, s);

		for (int j = 1; j <= m; ++j)
			mat[i][j] = s[j - 1];
	}
	
	int tmin = 1e5, x, y;

	for (int i = 1; i <= n; ++i) {

		for (int j = 1; j <= m; ++j) {

			if (mat[i][j] == 'R')
				lee (i, j, a);
			
			if (mat[i][j] == 'J')
				lee (i, j, b);
		}
	}

	for (int i = 1; i <= n; ++i) {

		for (int j = 1; j <= m; ++j) {

			if (a[i][j] && a[i][j] == b[i][j] && a[i][j] < tmin) {

				tmin = a[i][j];
				
				x = i;

				y = j;
			}
		}
	}

	fout << tmin << ' ' << x << ' ' << y;

	return 0;
}