Cod sursa(job #2954774)

Utilizator iLaurianLaurian Iacob iLaurian Data 15 decembrie 2022 12:08:19
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.08 kb
// https://infoarena.ro/problema/rj
// OJI 2004, clasa a 10-a RJ
#include<fstream>
#include<cstring>
#include <climits>
std::ifstream f ("rj.in");
std::ofstream g ("rj.out");
const int addRow[] = {0, 1, 0, -1, -1, 1, -1, 1};
const int addCol[] = {1, 0, -1, 0, -1, 1,  1,-1};
char c;
int matr[101][101],matj[101][101],i,j,m,n,inr,inj,sfr,sfj,mini=INT_MAX;
struct Pos {
    int row;
    int col;
};
Pos begr, begj;
Pos qr[101 * 101];
Pos posr;
Pos nghr;
void lee(int mat[101][101], Pos begr, Pos begj) {
    qr[0] = begr;
    inr = inj = sfr = sfj = 0;
    mat[begr.row][begr.col] = 1;
    //mat[begj.row][begj.col] = 1;
    while (inr <= sfr && posr.col!=begj.col && posr.row!=begj.row) {
        posr = qr[inr++];
        for (int i = 0; i < 8; i++) {
            nghr.row = posr.row + addRow[i];
            nghr.col = posr.col + addCol[i];
            if (mat[nghr.row][nghr.col]==32) {
                mat[nghr.row][nghr.col] = mat[posr.row][posr.col] + 1;
                qr[++sfr] = nghr;
            }
        }
        }
    //g<< inr << " " << qr[inr].row << " " << qr[inr].col;
}
int main()
{
    f>>n>>m;
    f.get();
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {f.get(c);
        matr[i][j] += c;
        matj[i][j] +=c;
        if(c=='R')
        {
            begr.row = i;
            begr.col = j;
        }
        else
        if(c=='J')
        {
            begj.row = i;
            begj.col = j;
        }
        }
        f.get();
    }
    for (i = 0; i <= m + 1; i++)
    matr[i][0] = matr[i][n + 1] = matj[i][0] = matj[i][n+1] = 88;
    for (j = 0; j <= n + 1; j++)
    matr[0][j] = matr[m + 1][j] = matj[0][j] = matj[m+1][j] = 88;

    lee(matj,begr,begj);
    lee(matr,begj,begr);

    int ti,tj;
    for(i=1; i<= m; i++)
        for(j = 1; j <= n; j++)
        if(matr[i][j]==matj[i][j])
        if(mini>matr[i][j] && matr[i][j]!=0)
        {
            mini = matr[i][j];
            ti=i;
            tj=j;
        }
    g<<mini<<' '<<ti<<' '<<tj;
    f.close();
    g.close();
    return 0;
}