Cod sursa(job #1911249)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 7 martie 2017 19:52:53
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.74 kb
#include<iostream>
#include<fstream>
#include<algorithm>

using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
pair <int, int> x[10002];
int vj[102][102], vr[102][102];
int i, j, iv, jv,n, m, d, ur, uj, p, mini, mi,mj,st,dr;
char a[102];
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();
        fin.get(a, 102);
        for(j=0;j<m;j++)
        {
            if(a[j]=='X')
            {
                vr[i][j+1]=-1;
                vj[i][j+1]=-1;
            }
            else
                if(a[j]=='J')
                {
                    vj[i][j+1]=1;
                    uj++;
                    st=i;
                    dr=j+1;
                }
                else
                    if(a[j]=='R')
                    {
                        vr[i][j+1]=1;
                        ur++;
                        x[ur].first=i;
                        x[ur].second=j+1;
                    }
                    else
                        {
                            vr[i][j+1]=0;
                            vj[i][j+1]=0;
                        }
        }
    }
    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++;
    }
    for(i=1;i<=10000;i++)
    {
        x[i].first=0;
        x[i].second=0;
    }
    x[1].first=st;
    x[1].second=dr;
    p=1;mini=10002;mi=102;mj=102;
    while(p<=uj)
    {
        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&&vj[iv][jv]==0)
            {
                uj++;
                x[uj].first=iv;
                x[uj].second=jv;
                vj[iv][jv]=vj[x[p].first][x[p].second]+1;
                if(vj[iv][jv]==vr[iv][jv]&&vr[iv][jv]<=mini)
                {
                    mini=vj[iv][jv];
                    if(mi>iv)
                    {
                        mi=iv;
                        mj=jv;
                    }
                    else
                        if(mi==iv)
                        {
                            if(mj>jv)
                                mj=jv;
                        }
                }
            }
        }
        p++;
    }
    fout<<mini<<" "<<mi<<" "<<mj;
    fin.close();
    fout.close();
    return 0;
}