Cod sursa(job #1771210)

Utilizator Claudiu07Pana Claudiu Claudiu07 Data 5 octombrie 2016 13:06:26
Problema Rj Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 4.79 kb
#include <iostream>
#include <cstdio>
#include <climits>
using namespace std;
int i,j,n,m, a[100][100],p,u,b[100][100],nr,x,y,d[100][2],k,lin1, lin2,col1,col2,mi,lmi,cmi;
char c,s[105];
int main()

{
    /*f>>n>>m;
    f.get(c);
     for(int i=1; i<=n; i++)
    for(int j=1; j<=m; j++)
    {
        f.get(c);
        if(c=='R') a[i][j]=-2,lin1=i,col1=j;
        else if(c=='J') b[i][j]=-3,lin2=i,col2=j;
         else if(c=='X') a[i][j]=b[i][j]= -1;
    }*/
    freopen("rj.in","r",stdin);//redefinesc tast ca fiin date.in
    freopen("rj.out","w",stdout);
    scanf("%d%d\n",&n,&m);
    mi=INT_MAX;
    for (i=1; i<=n; i++)
    {
        gets(s+1);
        for (j=1; j<=m; j++)
            if (s[j]=='R') a[i][j]=-2,lin1=i,col1=j;
            else if (s[j]=='J') b[i][j]=-3,lin2=i,col2=j;
            else if (s[j]=='X') a[i][j]=b[i][j]=-1;
    }

    {
        p=1;
        u=1;
        d[p][0]=lin1;
        d[p][1]=col1;
        a[lin1][col1]=1;
        while(p<=u)
        {
            x=d[p][0];
            y=d[p][1];
            k=a[x][y];
            if(x>1 && a[x-1][y]==0)
            {
                u++;
                d[u][0]=x-1;
                d[u][1]=y;
                a[x-1][y]=k+1;
            }
            if(y<m && a[x][y+1]==0)
            {
                u++;
                d[u][0]=x;
                d[u][1]=y+1;
                a[x][y+1]=k+1;;
            }
            if(x<n && a[x+1][y]==0)
            {
                u++;
                d[u][0]=x+1;
                d[u][1]=y;
                a[x+1][y]=k+1;
            }
            if(y>1 && a[x][y-1]==0)
            {
                u++;
                d[u][0]=x;
                d[u][1]=y-1;
                a[x][y-1]=k+1;
            }
            if(y>1 && x>1 && a[x-1][y-1]==0)
            {
                u++;
                d[u][0]=x-1;
                d[u][1]=y-1;
                a[x-1][y-1]=k+1;
            }
            if(y<m && x>1 && a[x-1][y+1]==0)
            {
                u++;
                d[u][0]=x-1;
                d[u][1]=y+1;
                a[x-1][y+1]=k+1;
            }
            if(y<m && x<n && a[x+1][y+1]==0)
            {
                u++;
                d[u][0]=x+1;
                d[u][1]=y+1;
                a[x+1][y+1]=k+1;
            }
            if(y>1 && x<n && a[x+1][y-1]==0)
            {
                u++;
                d[u][0]=x+1;
                d[u][1]=y-1;
                a[x+1][y-1]=k+1;
            }
            p++;
        }
    }
    {
        p=1;
        u=1;
        d[p][0]=lin2;
        d[p][1]=col2;
        b[lin2][col2]=1;
        while(p<=u)
        {
            x=d[p][0];
            y=d[p][1];
            k=b[x][y];
            if(x>1 && b[x-1][y]==0)
            {
                u++;
                d[u][0]=x-1;
                d[u][1]=y;
                b[x-1][y]=k+1;
            }
            if(y<m && a[x][y+1]==0)
            {
                u++;
                d[u][0]=x;
                d[u][1]=y+1;
                b[x][y+1]=k+1;;
            }
            if(x<n && b[x+1][y]==0)
            {
                u++;
                d[u][0]=x+1;
                d[u][1]=y;
                b[x+1][y]=k+1;
            }
            if(y>1 && b[x][y-1]==0)
            {
                u++;
                d[u][0]=x;
                d[u][1]=y-1;
                b[x][y-1]=k+1;
            }
            if(y>1 && x>1 && b[x-1][y-1]==0)
            {
                u++;
                d[u][0]=x-1;
                d[u][1]=y-1;
                b[x-1][y-1]=k+1;
            }
            if(y<m && x>1 && b[x-1][y+1]==0)
            {
                u++;
                d[u][0]=x-1;
                d[u][1]=y+1;
                b[x-1][y+1]=k+1;
            }
            if(y<m && x<n && b[x+1][y+1]==0)
            {
                u++;
                d[u][0]=x+1;
                d[u][1]=y+1;
                b[x+1][y+1]=k+1;
            }
            if(y>1 && x<n && b[x+1][y-1]==0)
            {
                u++;
                d[u][0]=x+1;
                d[u][1]=y-1;
                b[x+1][y-1]=k+1;
            }
            p++;
        }
    }
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
        {
            if(a[i][j]==b[i][j] && a[i][j]>=1)
            {if(a[i][j]<mi)
                {
                    mi=a[i][j];
                    lmi=i;
                    cmi=j;
                }
                else {if(a[i][j]==mi && i<lmi)
                    {
                        lmi=i;
                        cmi=j;
                    }
                    else if(a[i][j]==mi && i==lmi && j<cmi) cmi=j;}}
        }
    printf("%d %d %d",mi,lmi,cmi);
}