Cod sursa(job #920401)

Utilizator AnduuFMI Alexandru Banu Anduu Data 20 martie 2013 12:19:21
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.78 kb
#include <fstream>
using namespace std;
int r[101][101],J[101][101],n,m,i,j,xr,yr,xj,yj,rez[100][100],x=0;;
void citire()
{
    string x;
    ifstream in("rj.in");
    in>>n>>m;
    x=in.get();
    for (i=1;i<=n;++i)
    {
        getline(in,x);
        for (j=1;j<=m;++j)
        {
            if (x[j-1]=='R')
            {
                r[i][j]=1;
                xr=i;
                yr=j;
                J[i][j]=-2;
            }
            if (x[j-1]=='J')
            {
                r[i][j]=-2;
                xj=i;
                yj=j;
                J[i][j]=1;
            }
            if (x[j-1]=='X')
            r[i][j]=J[i][j]=-1;
            if (x[j-1]==' ')
            r[i][j]=J[i][j]=0;
        }
    }
    in.close();
}
void bordare()
{
    for (i=0;i<=n+1;++i)
    r[i][0]=r[i][m+1]=J[i][0]=J[i][m+1]=-1;
    for (i=0;i<=m+1;i++)
    r[0][i]=r[n+1][i]=J[0][i]=J[n+1][i]=-1;
}
void leer()
{
    int l,c,di[]={-1,-1,0,1,1,1,0,-1},dj[]={0,1,1,1,0,-1,-1,-1},inc=1,sf=1,k,coada[5000][3];
    coada[inc][0]=xr;
    coada[inc][1]=yr;
    coada[inc][2]=1;
    while (inc<=sf)
    {
        for (k=0;k<=7;++k)
        {
            l=coada[inc][0]+di[k];
            c=coada[inc][1]+dj[k];
            if (r[l][c]==0)
            {
                r[l][c]=coada[inc][2]+1;
                ++sf;
                coada[sf][0]=l;
                coada[sf][1]=c;
                coada[sf][2]=r[l][c];
            }
        }
        ++inc;
    }
}
void leej()
{
    int l,c,di[]={-1,-1,0,1,1,1,0,-1},dj[]={0,1,1,1,0,-1,-1,-1},inc=1,sf=1,k,coada[5000][3];
    coada[inc][0]=xj;
    coada[inc][1]=yj;
    coada[inc][2]=1;
    while (inc<=sf)
    {
        for (k=0;k<=7;++k)
        {
            l=coada[inc][0]+di[k];
            c=coada[inc][1]+dj[k];
            if (J[l][c]==0)
            {
                J[l][c]=coada[inc][2]+1;
                ++sf;
                coada[sf][0]=l;
                coada[sf][1]=c;
                coada[sf][2]=J[l][c];
            }
        }
        ++inc;
    }
}
void cauta()
{
    for (i=1;i<=n;++i)
    for (j=1;j<=m;++j)
    if (r[i][j]==J[i][j]&&r[i][j]!=-1&&r[i][j]!=0)
    {
        rez[++x][1]=r[i][j];
        rez[x][2]=i;
        rez[x][3]=j;
    }
}
void sorteaza()
{
    int z;
    for (i=1;i<x;++i)
    for (j=i+1;j<=x;++j)
    if (rez[j][1]<rez[i][1])
    {
        z=rez[j][1];
        rez[j][1]=rez[i][1];
        rez[i][1]=z;
        z=rez[j][2];
        rez[j][2]=rez[i][2];
        rez[i][2]=z;
        z=rez[j][3];
        rez[j][3]=rez[i][3];
        rez[i][3]=z;
    }
}
void sort2()
{
    int z;
    for (i=1;i<x;++i)
    for (j=i+1;j<=x;++j)
    if (rez[j][2]<rez[i][2])
    {
        z=rez[j][1];
        rez[j][1]=rez[i][1];
        rez[i][1]=z;
        z=rez[j][2];
        rez[j][2]=rez[i][2];
        rez[i][2]=z;
        z=rez[j][3];
        rez[j][3]=rez[i][3];
        rez[i][3]=z;
    }
}
void sort3()
{
    int z;
    for (i=1;i<x;++i)
    for (j=i+1;j<=x;++j)
    if (rez[j][1]<rez[i][1])
    {
        z=rez[j][1];
        rez[j][1]=rez[i][1];
        rez[i][1]=z;
        z=rez[j][2];
        rez[j][2]=rez[i][2];
        rez[i][2]=z;
        z=rez[j][3];
        rez[j][3]=rez[i][3];
        rez[i][3]=z;
    }
}
void afis()
{
    ofstream out("rj.out");
    out<<rez[1][1]<<'\n'<<rez[1][2]<<' '<<rez[1][3]<<'\n';
}
int main()
{
    citire();
    bordare();
    leer();
    leej();
    /*    ofstream out("rj.out");
    for (i=1;i<=n;++i)
    {
        for (j=1;j<=m;++j)
        out<<J[i][j]<<' ';
        out<<'\n';
    }
    out.close();*/
    cauta();
    sorteaza();
    if (rez[1][1]==rez[2][1])
    sort2();
    if (rez[1][2]==rez[2][2])
    sort3();
    afis();
    return 0;
}