Cod sursa(job #2491980)

Utilizator CosminMorarMorar Cosmin Andrei CosminMorar Data 13 noiembrie 2019 19:16:17
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 5.08 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n, m, iRo, jRo, iJu, jJu, mini, minj, minim = 9999999, ror, juj;
int ro[102][102], ju[102][102];
char ch;

struct Loc {
    int di, dj, valoare;
} c[10501];

void Adauga(int poz, int di, int dj, int valoare) {
    c[poz].di = di;
    c[poz].dj = dj;
    c[poz].valoare = valoare;
}

void LeeRo() {
    int in = 1, sf = 1, di, dj, valoare;
    c[1].di = iRo;
    c[1].dj = jRo;
    c[1].valoare = 1;
    ro[iRo][jRo] = 1;
    while (in <= sf) {
        di = c[in].di;
        dj = c[in].dj;
        valoare = c[in].valoare + 1;
        if (ro[di - 1][dj] == 0) {
            sf++;
            Adauga(sf, di - 1, dj, valoare);
            ro[di - 1][dj] = valoare;
        }
        if (ro[di - 1][dj + 1] == 0) {
            sf++;
            Adauga(sf, di - 1, dj + 1, valoare);
            ro[di - 1][dj + 1] = valoare;
        }
        if (ro[di][dj + 1] == 0) {
            sf++;
            Adauga(sf, di, dj + 1, valoare);
            ro[di][dj + 1] = valoare;
        }
        if (ro[di + 1][dj + 1] == 0) {
            sf++;
            Adauga(sf, di + 1, dj + 1, valoare);
            ro[di + 1][dj + 1] = valoare;
        }
        if (ro[di + 1][dj] == 0) {
            sf++;
            Adauga(sf, di + 1, dj, valoare);
            ro[di + 1][dj] = valoare;
        }
        if (ro[di + 1][dj - 1] == 0) {
            sf++;
            Adauga(sf, di + 1, dj - 1, valoare);
            ro[di + 1][dj - 1] = valoare;
        }
        if (ro[di][dj - 1] == 0) {
            sf++;
            Adauga(sf, di, dj - 1, valoare);
            ro[di][dj - 1] = valoare;
        }
        if (ro[di - 1][dj - 1] == 0) {
            sf++;
            Adauga(sf, di - 1, dj - 1, valoare);
            ro[di - 1][dj - 1] = valoare;
        }
        in++;
    }
}

void LeeJu() {
    int in = 1, sf = 1, di, dj, valoare;
    c[1].di = iJu;
    c[1].dj = jJu;
    c[1].valoare = 1;
    ju[iJu][jJu] = 1;
    while (in <= sf) {
        di = c[in].di;
        dj = c[in].dj;
        valoare = c[in].valoare + 1;
        if (ju[di - 1][dj] == 0) {
            sf++;
            Adauga(sf, di - 1, dj, valoare);
            ju[di - 1][dj] = valoare;
        }
        if (ju[di - 1][dj + 1] == 0) {
            sf++;
            Adauga(sf, di - 1, dj + 1, valoare);
            ju[di - 1][dj + 1] = valoare;
        }
        if (ju[di][dj + 1] == 0) {
            sf++;
            Adauga(sf, di, dj + 1, valoare);
            ju[di][dj + 1] = valoare;
        }
        if (ju[di + 1][dj + 1] == 0) {
            sf++;
            Adauga(sf, di + 1, dj + 1, valoare);
            ju[di + 1][dj + 1] = valoare;
        }
        if (ju[di + 1][dj] == 0) {
            sf++;
            Adauga(sf, di + 1, dj, valoare);
            ju[di + 1][dj] = valoare;
        }
        if (ju[di + 1][dj - 1] == 0) {
            sf++;
            Adauga(sf, di + 1, dj - 1, valoare);
            ju[di + 1][dj - 1] = valoare;
        }
        if (ju[di][dj - 1] == 0) {
            sf++;
            Adauga(sf, di, dj - 1, valoare);
            ju[di][dj - 1] = valoare;
        }
        if (ju[di - 1][dj - 1] == 0) {
            sf++;
            Adauga(sf, di - 1, dj - 1, valoare);
            ju[di - 1][dj - 1] = valoare;
        }
        in++;
    }
}

int main() {
    fin >> n >> m;
    n++; m++;
    for (int i = 0; i <= n; i++)
        ro[i][0] = ro[i][m] = ju[i][0] = ju[i][m] = -1;
    for (int j = 0; j <= m; j++)
        ro[0][j] = ro[n][j] = ju[0][j] = ju[n][j] = -1;
    n--; m--;
            fin >> noskipws >> ch;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            fin >> noskipws >> ch;
            if (ch == ' ') {
                ro[i][j] = ju[i][j] = 0;
            } else if (ch == 'X') {
                ro[i][j] = ju[i][j] = -1;
            } else if (ch == 'R') {
                ro[i][j] = ju[i][j] = 0;
                iRo = i;
                jRo = j;
            } else if (ch == 'J') {
                ro[i][j] = ju[i][j] = 0;
                iJu = i;
                jJu = j;
            }
        }
            fin >> noskipws >> ch;
    }
    LeeRo();
    LeeJu();
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            ror = ro[i][j];
            juj = ju[i][j];
            if (ror < juj) {
                if (juj < minim) {
                    minim = juj;
                    mini = i;
                    minj = j;
                }
            } else if (ror > juj) {
                if (ror < minim) {
                    minim = ror;
                    mini = i;
                    minj = j;
                }
            } else if (ror == juj && ror > 0) {
                if (ror < minim) {
                    minim = ror;
                    mini = i;
                    minj = j;
                }
            }
        }
    }
    fout << minim << ' ' << mini << ' ' << minj;
    return 0;
}