Cod sursa(job #2492012)

Utilizator CosminMorarMorar Cosmin Andrei CosminMorar Data 13 noiembrie 2019 20:09:12
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 4.55 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n, m, iRo, jRo, iJu, jJu;
int ro[102][102], ju[102][102];
char ch;
bool found;

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 && !found; i++) {
        for (int j = 1; j <= m && !found; j++) {
            if (ro[i][j] == ju[i][j] && ro[i][j] > 0) {
                found = true;
                fout << ro[i][j] << ' ' << i << ' ' << j;
            }
        }
    }
    return 0;
}