Cod sursa(job #1910957)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 7 martie 2017 18:59:00
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.28 kb
#include<iostream>
#include<fstream>
#include<algorithm>

using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
pair <int, int> x[10002], y[10002];
int vj[102][102], vr[102][102];
int i, j, iv, jv,n, m, d, ur, uj, p;
char a;
int di[]={ 0,  0, -1, +1, -1, +1, -1, +1};
int dj[]={-1, +1,  0,  0, -1, +1, +1, -1};

int main()
{
    fin>>n>>m;
    for(i=1;i<=n;i++)
    {
        fin.get();
        for(j=1;j<=n;j++)
        {
            fin.get(a);
            if(a=='X')
            {
                vr[i][j]=0;
                vj[i][j]=0;
            }
            else
                if(a=='J')
                {
                    vj[i][j]=1;
                    uj++;
                    y[uj].first=i;
                    y[uj].second=j;
                }
                else
                    if(a=='R')
                    {
                        vr[i][j]=1;
                        ur++;
                        x[ur].first=i;
                        x[ur].second=j;
                    }
                    else
                        {
                            vr[i][j]=-1;
                            vj[i][j]=-1;
                        }
        }
    }
    p=1;
    while(p<=ur)
    {
        for(d=0;d<=7;d++)
        {
            iv=x[p].first+di[d];
            jv=x[p].second+dj[d];
            if(iv>=1&&iv<=n&&jv>=1&&jv<=m&&vr[iv][jv]==0)
            {
                ur++;
                x[ur].first=iv;
                x[ur].second=jv;
                vr[iv][jv]=vr[x[p].first][x[p].second]+1;
            }
        }
        p++;
    }
    p=1;
    while(p<=uj)
    {
        for(d=0;d<=7;d++)
        {
            iv=y[p].first+di[d];
            jv=y[p].second+dj[d];
            if(iv>=1&&iv<=n&&jv>=1&&jv<=m&&vj[iv][jv]==0)
            {
                uj++;
                y[uj].first=iv;
                y[uj].second=jv;
                vj[iv][jv]=vj[y[p].first][y[p].second]+1;
                if(vj[iv][jv]==vr[iv][jv]&&vr[iv][jv]!=0)
                {
                    fout<<vj[iv][jv]<<" "<<iv<<" "<<jv;
                    p=uj;
                    break;
                }
            }
        }
        p++;
    }
    fin.close();
    fout.close();
    return 0;
}