Cod sursa(job #1199862)

Utilizator tudormaximTudor Maxim tudormaxim Data 20 iunie 2014 22:03:33
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.15 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int a[102][102];
int b[102][102];
int main()
{
    int n,i,j,xr,yr,xj,yj,x1r,y1r,x1j,y1j,pr,ur,pj,uj,m,x,y,smin=9999,xf,yf;
    struct poz {int l,c;};
    char ma[105];
    poz coadar[10201];
    poz coadaj[10201];
    f>>n>>m;
    int dl[8]={-1,-1,-1,0,1,1,1,0},dc[8]={-1,0,1,1,1,0,-1,-1};
    for (j=0;j<=m+1;j++)
    {
        a[0][j]=-1;
        b[0][j]=-1;
    }
    for (i=0;i<=n+1;i++)
    {
        a[i][0]=-1;
        b[i][0]=-1;
    }
    for (i=0;i<=n+1;i++)
    {
        a[i][m+1]=-1;
        b[i][m+1]=-1;
    }
    for (j=0;j<=m+1;j++)
    {
        a[n+1][j]=-1;
        b[n+1][j]=-1;
    }
    for(i=0;i<=n;i++)
    {
        f.getline(ma,105);
        for(j=0;j<=m;j++)
        {
            if(ma[j]=='R'){xr=i; yr=j+1; a[i][j+1]=1; }
            if(ma[j]=='J'){xj=i; yj=j+1; b[i][j+1]=1;}
            if(ma[j]=='X') {a[i][j+1]=-1; b[i][j+1]=-1;}
        }
    }
    coadar[0].l=xr;
    coadar[0].c=yr;
    coadaj[0].l=xj;
    coadaj[0].c=yj;
    pr=0;
    ur=0;
    pj=0;
    uj=0;
    while (pr<=ur||pj<=uj)
    {
        x=coadar[pr].l; y=coadar[pr].c;
        pr++;
        for (i=0;i<8;i++)
        {
            x1r=x+dl[i]; y1r=y+dc[i];
            if (a[x1r][y1r]==0)
            {
                a[x1r][y1r]=a[x][y]+1;
                ur++;
                coadar[ur].l=x1r;
                coadar[ur].c=y1r;
            }
        }
        x=coadaj[pj].l; y=coadaj[pj].c;
        pj++;
        for (i=0;i<8;i++)
        {
            x1j=x+dl[i]; y1j=y+dc[i];
            if (b[x1j][y1j]==0)
            {
                b[x1j][y1j]=b[x][y]+1;
                uj++;
                coadaj[uj].l=x1j; coadaj[uj].c=y1j;
            }
        }
    }

    for (i=1;i<=n;i++)
        for (j=1;j<=m;j++)
            if (a[i][j]==b[i][j] && a[i][j]>0)
                if (a[i][j]+b[i][j]<smin)
                {
                    smin=a[i][j]+b[i][j];
                    xf=i;
                    yf=j;
                }
    g<<a[xf][yf]<<" "<<xf<<" "<<yf;
    return 0;
}