Cod sursa(job #2698186)

Utilizator TornerroRusu Marius Tornerro Data 21 ianuarie 2021 12:09:45
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.36 kb
#include <iostream>
#include <fstream>
#include <climits>
#include <cstring>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");

struct coordonate
{
    int x,y;
};

coordonate c[100001];
int xr,yr,xj,yj,n,m,a[101][101],b[101][101];
char s[101];
int dx[]={-1,-1,0,1,1,1,0,-1};
int dy[]={0,1,1,1,0,-1,-1,-1};

void citire(int &n,int &m)
{
    int i,j;
    fin>>n>>m;
    fin.getline(s,101);
    for(i=1;i<=n;++i)
    {
        fin.getline(s,101);
        for(j=1;j<=m;++j)
        {
            if(s[j-1]==' ' || s[j-1]=='R' || s[j-1]=='J')
            {
                a[i][j]=0;
                b[i][j]=0;
            }
            else
            {
                a[i][j]=-1;
                b[i][j]=-1;
            }
            if(s[j-1]=='R')
            {
                xr=i;
                yr=j;
            }
            if(s[j-1]=='J')
            {
                xj=i;
                yj=j;
            }
        }
    }
}

int interior(int x,int y)
{
    if(x>=1 && x<=n && y>=1 && y<=m)return 1;
    return 0;
}

void Lee(int xp,int yp,int a[][101])
{
    int x,y,xv,yv,p=1,u=1,i;
    c[u].x=xp;
    c[u].y=yp;
    a[xp][yp]=0;
    while(u>=p)
    {
        x=c[p].x;
        y=c[p++].y;
        for(i=0;i<=7;++i)
        {
            xv=x+dx[i];
            yv=y+dy[i];
            if(interior(xv,yv) && a[xv][yv]==0)
            {
                c[++u].x=xv;
                c[u].y=yv;
                a[xv][yv]=a[x][y]+1;
            }
        }
    }
}

int main()
{
    int i,j,min=INT_MAX,x=0,y=0;
    citire(n,m);
    Lee(xr,yr,a);
    Lee(xj,yj,b);
    for(i=1;i<=n;++i)
    {
        for(j=1;j<=m;++j)
        {
            if(a[i][j]==b[i][j] && a[i][j])
            {
                if(a[i][j]<min && a[i][j]>0)
                {
                    min=a[i][j];
                    x=i;
                    y=j;
                }
                else
                {
                    if(a[i][j]==min)
                    {
                        if(i<x)
                        {
                            x=i;
                            y=j;
                        }
                        else if(j<y && i==x)y=j;
                    }
                }
            }
        }
    }
    fout<<min+1<<' '<<x<<' '<<y;
    return 0;
}