Cod sursa(job #1377534)

Utilizator andreeaanbrusAndreea Anbrus andreeaanbrus Data 5 martie 2015 22:25:23
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.22 kb
#include <iostream>
#include <cstring>
#include <fstream>
#include <iomanip>

using namespace std;

ifstream fin("rj.in");
ofstream fout("rj.out");
struct element
{
    int lin, col;
};
element q1[10004], q2[10005];
//char s[105][105]; nu avem nevoie
int n, m, a[105][105], b[105][105], dmin = 100005, xmin , ymin ;
const int di[] = {-1, 0, 1, -1 , -1, 0, 1, 1};
const int dj[] = {-1, -1, -1, 0, 1, 1 ,1 ,0};

int main()
{
    int st1 = 0, dr1 = -1, st2 = 0, dr2 = -1;
    fin >> n >> m; fin.get();
    char c;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= m; j++)
        {
            c = fin.get();
            if(c == 'X')
                a[i][j] = -1, b[i][j] = -1;
            else
                if(c == 'R')
                    dr1++, q1[dr1].lin = i, q1[dr1].col = j,  a[i][j] = 1;
            else
                if(c == 'J')
                    dr2++, q2[dr2].lin = i, q2[dr2].col = j, b[i][j] = 1;
            else
                if(c == ' ')
                    a[i][j] = 0, b[i][j] = 0;
            if(fin.peek() == '\n')
                fin.get();
        }

    while(st1 <= dr1)
    {
        int i =  q1[st1].lin, j = q1[st1].col;
        for(int k = 0; k < 8; k++)
        {
            int ii = i + di[k], jj = j + dj[k];
            if(ii > 0 && ii <= n && jj > 0 && jj <= m && a[ii][jj] == 0)
            {
                a[ii][jj]  = a[i][j] + 1;
                dr1++;
                q1[dr1].lin = ii;
                q1[dr1].col = jj;

            }

        }
        st1++;
    }

    while(st2 <= dr2)
    {
        int i = q2[st2].lin, j = q2[st2].col;
        for(int k = 0; k < 8; k ++)
        {
            int ii = i + di[k], jj = j + dj[k];
            if(ii > 0 && ii <= n && jj > 0 && jj <= m && b[ii][jj] == 0 )
            {
                b[ii][jj] = b[i][j] + 1;
                dr2++;
                q2[dr2].lin = ii;
                q2[dr2].col = jj;
            }
        }
        st2++;
    }
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= m; j++)
        {
            if(a[i][j] == b[i][j] && a[i][j] > 0)
                if(a[i][j] < dmin)
                    dmin = a[i][j], xmin = i, ymin = j;
        }
    fout<<dmin<<" "<<xmin<<" "<<ymin;
}