Cod sursa(job #2503324)

Utilizator AlexHocHociota Alexandru AlexHoc Data 2 decembrie 2019 20:57:07
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.79 kb

#include<stdio.h>
long i,j,n,m,inc1,inc2,sf1,sf2,nx,ny,k,l;
long dx[]={0,-1,-1,-1,+0,+1,+1,+1,+0};
long dy[]={0,-1,+0,+1,+1,+1,+0,-1,-1};
char sht,c[105][105];
long mm[105][105], mmm[105][105],min,a,b;
 
struct lol
{
    int x,y,t;
};
lol rom,jul,q1[12001],q2[12001];
 
int main()
{
    freopen ("rj.in","rt",stdin);
    freopen ("rj.out","wt",stdout);
 
    scanf("%ld %ld",&n, &m);
    fgets(c[0], 105, stdin);
 
    for (i = 0; i < n; i++)
    {
        fgets(c[i], 105, stdin);
        for (j = 0; j < m; j++)
        {
            if (c[i][j]=='R') rom.x=i,rom.y=j, mm[i][j]=1;
            else
            if (c[i][j]=='J') jul.x=i,jul.y=j,mmm[i][j]=1;
            else
            if (c[i][j]=='X') mm[i][j]=-1,mmm[i][j]=-1;
        }
    }
 
    inc1=sf1=1;
    q1[inc1].x=rom.x,q1[inc1].y=rom.y,q1[inc1].t=1;
    inc2=sf2=1;
    q2[inc2].x=jul.x,q2[inc2].y=jul.y,q2[inc2].t=1;
    
    while (sf1>=inc1)
    {
        for (i=1;i<=8;i++)
        {
            nx=q1[inc1].x+dx[i];
            ny=q1[inc1].y+dy[i];
 
            if (nx>=0 && nx<n && ny>=0 && ny<m && !mm[nx][ny])
                q1[++sf1].x=nx,q1[sf1].y=ny,q1[sf1].t=q1[inc1].t+1,mm[nx][ny]=q1[sf1].t;
        }
        inc1++;
    }
    
    while (sf2>=inc2)
    {
        for (i=1;i<=8;i++)
        {
            nx=q2[inc2].x+dx[i];
            ny=q2[inc2].y+dy[i];
 
            if (nx>=0 && nx<n && ny>=0 && ny<m && !mmm[nx][ny])
            {
                q2[++sf2].x=nx,q2[sf2].y=ny,q2[sf2].t=q2[inc2].t+1,mmm[nx][ny]=q2[sf2].t;
 
                
            }
        }
        inc2++;
    }
    min=1000000000;
    for (i = 0 ; i < n ; i ++)
        for (j = 0 ; j < m ; j ++)
            if (mmm[i][j] == mm[i][j] && mm[i][j] > 0 && mm[i][j] < min)
                min=mm[i][j],a=i,b=j;
 
    printf("%ld %ld %ld\n",min,a+1,b+1);
    return 0;
}