Cod sursa(job #908147)

Utilizator mcip1977Muresan Ciprian mcip1977 Data 8 martie 2013 19:59:07
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.11 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream is("rj.in");
ofstream os("rj.out");
const int di[]={-1,-1,-1,0,0,1,1,1};
const int dj[]={-1,0,1,-1,1,-1,0,1};
int n,m,a[101][101],b[101][101];
int inside(int i, int j)
{
    return i>=1 && j>=1 && i<=n && j<=m;
}

int main()
{
    int i,j,ir,jr,ij,jj,inou,jnou,pas;
    char c[101];
    is>>n>>m;
    is.get();
    for(i=1;i<=n;i++)
            {
                is.getline(c,101);
                for(j=0;j<strlen(c);j++)
                {
                if(c[j]==' ') a[i][j+1]=0;
                else if(c[j]=='X') a[i][j+1]=-1;
                else if(c[j]=='R') {ir=i; jr=j+1; a[i][j+1]=0;}
                else if(c[j]=='J') {ij=i; jj=j+1; a[i][j+1]=0;}
                }
            }

    for(i=1;i<=n;i++)
            for(j=1;j<=m;j++) b[i][j]=a[i][j];
    a[ir][jr]=1;
    pas=1;
    do
    {
        for(i=1;i<=n;i++)
            for(j=1;j<=m;j++)
                if(a[i][j]==pas)
                   for (int d=0;d<8;d++)
                   {
                       inou=i+di[d];
                       jnou=j+dj[d];
                       if(inside(inou,jnou))
                            if(a[inou][jnou]==0)
                               a[inou][jnou]=pas+1;
                   }
        pas++;
    }
    while(a[ij][jj]==0);

    b[ij][jj]=1;
    pas=1;
    do
    {
        for(i=1;i<=n;i++)
            for(j=1;j<=m;j++)
                if(b[i][j]==pas)
                   for (int d=0;d<8;d++)
                   {
                       inou=i+di[d];
                       jnou=j+dj[d];
                       if(inside(inou,jnou))
                            if(b[inou][jnou]==0)
                               b[inou][jnou]=pas+1;
                   }
        pas++;
    }
    while(b[ir][jr]==0);

    pas=(a[ij][jj]+1)/2;
    int x=0,y=0;
    for(i=1;i<=n;i++)
            for(j=1;j<=m;j++)
               if(a[i][j]==pas && b[i][j]==pas&& x==0)
               {
                   x=i; y=j;
               }
    os<<pas<<" "<<x<<" "<<y;
    is.close();
    os.close();
    return 0;
}