Cod sursa(job #1337618)

Utilizator NicusorTelescu Nicolae Nicusor Data 9 februarie 2015 11:51:41
Problema Rj Scor 0
Compilator cpp Status done
Runda simulareoji2015cl10 Marime 2.62 kb
#include <cstdio>
#include <cstring>

using namespace std;

struct poz
{
    int x,y;
};

poz cd[10003];

int jul[103][103],rom[103][103];
char v[101];
int dlin[8]={-1,-1,-1,0,0,1,1,1},dcol[8]={0,1,-1,-1,1,-1,0,1};

int main()
{
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    int n,m;
    scanf("%d %d\n",&n,&m);
    for (int i=0;i<=n+1;i++)
    {
        if (i==0||i==n+1)
        for (int j=0;j<=m+1;j++)
        {
            jul[i][j]=-1;
            rom[i][j]=-1;
        }
        else
        {
            jul[i][0]=-1;
            jul[i][m+1]=-1;
            rom[i][0]=-1;
            rom[i][m+1]=-1;
        }
    }
    int r1,r2,j1,j2;
    for (int i=1;i<=n;i++)
    {
        gets(v+1);
        for (int j=1;j<=m;j++)
        {
            if (v[j]=='R')
            {
                jul[i][j]=-1;
                rom[i][j]=1;
                r1=i;
                r2=j;
            }
            if (v[j]=='J')
            {
                jul[i][j]=1;
                rom[i][j]=-1;
                j1=i;
                j2=j;
            }
            if (v[j]=='X')
            {
                jul[i][j]=-1;
                rom[i][j]=-1;
            }
            if (v[j]==' ')
            {
                jul[i][j]=0;
                rom[i][j]=0;
            }
        }
    }
    int u=1,p=1,lin,col;
    cd[1].x=r1;
    cd[1].y=r2;
    lin=r1;
    col=r2;
    /// pentru Romeo
    while (p<=u)
    {
        for (int i=0;i<8;i++)
        {
            if (rom[lin+dlin[i]][col+dcol[i]]==0)
            {
                u++;
                cd[u].x=lin+dlin[i];
                cd[u].y=col+dcol[i];
                rom[lin+dlin[i]][col+dcol[i]]=rom[lin][col]+1;
            }
        }
        p++;
        lin=cd[p].x;
        col=cd[p].y;
    }
    ///pentru Julieta
    p=1;u=1;
    cd[1].x=j1;
    cd[1].y=j2;
    lin=j1;
    col=j2;
    while (p<=u)
    {
        for (int i=0;i<8;i++)
        {
            if (jul[lin+dlin[i]][col+dcol[i]]==0)
            {
                u++;
                cd[u].x=lin+dlin[i];
                cd[u].y=col+dcol[i];
                jul[lin+dlin[i]][col+dcol[i]]=jul[lin][col]+1;
            }
        }
        p++;
        lin=cd[p].x;
        col=cd[p].y;
    }
    int lmin,l1,l2;
    for (int i=1;i<=n;i++)
    {
        for (int j=1;j<=m;j++)
        {
            if (rom[i][j]==jul[i][j]&&rom[i][j]!=-1&&rom[i][j]<lmin&&rom[i][j]!=0)
            {
                l1=i;l2=j;lmin=rom[i][j];
            }
        }
    }
    printf("%d %d %d",lmin,l1,l2);

}