Cod sursa(job #2551161)

Utilizator Guccifer2429Julien Iancu Guccifer2429 Data 19 februarie 2020 16:37:04
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.53 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("rj.in");
ofstream fout("rj.out");

queue < pair <int, int > > ro;
queue < pair <int, int > > ju;
int n,m;
char s[1000];
int a[1000][1000];
int b[1000][1000];
int c[1000][1000];
int dx[]= {-1,-1,0,1,1,1,0,-1};
int dy[]= {0,1,1,1,0,-1,-1,-1};

void citire()
{
    fin>>n>>m;
    fin.get();
    for(int i=1; i<=n; i++)
    {
        fin.getline(s,200);
        for(int j=0; j<m; j++)
        {
            if(s[j]=='X')
            {
                a[i][j]=-1;
                b[i][j]=-1;
                c[i][j]=-1;
            }
            else if(s[j]==' ')
            {
                a[i][j]=0;
                b[i][j]=0;
                c[i][j]=0;
            }
            else if(s[j]=='R')
            {
                ro.push(make_pair(i,j));

            }
            else
            {
                if(s[j]=='J')

                {


                    ju.push(make_pair(i,j));

                }
            }
        }
    }
    b[ro.front().first][ro.front().second]=1;
    c[ju.front().first][ju.front().second]=1;
}
void lee_romeo()
{
    int inou,jnou;
    while(!ro.empty())
    {
        for(int i=0; i<8; i++)
        {
            inou=ro.front().first+dx[i];
            jnou=ro.front().second+dy[i];
            if(b[inou][jnou]==0 && inou>=1 && inou<=n && jnou>=0 && jnou<m)
            {
                b[inou][jnou]=b[ro.front().first][ro.front().second]+1;
                ro.push(make_pair(inou,jnou));
            }
        }
        ro.pop();
    }
}
void lee_julieta()
{
    int inou,jnou;
    while(!ju.empty())
    {
        for(int i=0; i<8; i++)
        {
            inou=ju.front().first+dx[i];
            jnou=ju.front().second+dy[i];
            if(c[inou][jnou]==0 && inou>=1 && inou<=n && jnou>=0 && jnou<m)
            {
                c[inou][jnou]=c[ju.front().first][ju.front().second]+1;
                ju.push(make_pair(inou,jnou));
            }
        }
        ju.pop();
    }
}
void solve()
{
    int x=0,y=0;
    int mini=INT_MAX;
    for(int i=1;i<=n;i++)
    {
        for(int j=0;j<m;j++)
            {
                if(b[i][j]==c[i][j] && b[i][j]!=-1 && b[i][j]!=0 && b[i][j]<=mini)
                {
                    x=i;
                    y=j;
                    mini=b[i][j];
                }

            }
    }
    fout<<mini<<' '<<x<<' '<<y+1;
}
int main()
{
    citire();
    lee_romeo();
    lee_julieta();
    solve();
}