Cod sursa(job #2393498)

Utilizator hhhhhhhAndrei Boaca hhhhhhh Data 31 martie 2019 16:07:15
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.55 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n,m,romeo[101][101],julieta[101][101],i,j,xromeo,xjulieta,yromeo,yjulieta,lg,x,y,minim;
char v[101][101],c;
pair<int,int>coada[100001],sol;
bool okromeo()
{
    if(x<0||y<0||x>n-1||y>n-1||romeo[x][y]!=0)
        return 0;
    return 1;
}
bool okjulieta()
{
    if(x<0||y<0||x>n-1||y>n-1||julieta[x][y]!=0)
        return 0;
    return 1;
}
int main()
{
    fin>>n>>m;
    int dirx[10]={-1,1,0,0,-1,1,-1,1};
    int diry[10]={0,0,1,-1,-1,1,1,-1};
    for(i=0;i<n;i++)
        {
            fin.get();
            fin.get(v[i],1001);
        }
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            if(v[i][j]=='\0')
                v[i][j]=' ';
            if(v[i][j]=='R')
            {
                xromeo=i;
                yromeo=j;
            }
            if(v[i][j]=='J')
            {
                xjulieta=i;
                yjulieta=j;
            }
            if(v[i][j]=='X')
            {
                romeo[i][j]=-2;
                julieta[i][j]=-2;
            }
        }
    }
    coada[1].first=xromeo;
    coada[1].second=yromeo;
    lg=1;
    romeo[xromeo][yromeo]=1;
    for(i=1;i<=lg;i++)
    {
        for(j=0;j<8;j++)
        {
            x=coada[i].first+dirx[j];
            y=coada[i].second+diry[j];
            if(okromeo())
            {
                romeo[x][y]=romeo[coada[i].first][coada[i].second]+1;
                lg++;
                coada[lg].first=x;
                coada[lg].second=y;
            }
        }
    }
    coada[1].first=xjulieta;
    coada[1].second=yjulieta;
    lg=1;
    julieta[xjulieta][yjulieta]=1;
    for(i=1;i<=lg;i++)
    {
        for(j=0;j<8;j++)
        {
            x=coada[i].first+dirx[j];
            y=coada[i].second+diry[j];
            if(okjulieta())
            {
                julieta[x][y]=julieta[coada[i].first][coada[i].second]+1;
                lg++;
                coada[lg].first=x;
                coada[lg].second=y;
            }
        }
    }
    minim=1000000000;
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
            if(romeo[i][j]==julieta[i][j]&&romeo[i][j]>0&&julieta[i][j]>0)
            {
                if(romeo[i][j]<minim)
                {
                    minim=romeo[i][j];
                    sol.first=i+1;
                    sol.second=j+1;
                }
            }
    }
    fout<<minim<<" "<<sol.first<<" "<<sol.second;
    return 0;
}