Cod sursa(job #2609982)

Utilizator Andrei012Trache Andrei Andrei012 Data 3 mai 2020 22:12:13
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.87 kb
#include <bits/stdc++.h>

using namespace std;
int a[3][101][101],parc[3][101][101],n,m;
int dl[]={0,0,1,1,1,0,-1,-1,-1};
int dc[]={0,1,1,0,-1,-1,-1,0,1};
struct ura
{
    int x,y;
};
ura q[10001];
bool check(int x,int y){
    if(x>0 && x<=n && y>0 && y<=m)
        return true;
    return false;
}

void lee(int x,int y,int k){
    int st=1,dr=1,kk,i,j;
    q[st].x=x;
    q[st].y=y;
    a[k][x][y]=1;
    parc[k][x][y]=1;
    while(st<=dr){
        for(kk=1;kk<=8;kk++){
            i=q[st].x+dl[kk];
            j=q[st].y+dc[kk];
            if(check(i,j)==true && a[k][i][j]!=-1 && parc[k][i][j]==0){
                ++dr;
                q[dr].x=i;
                q[dr].y=j;
                a[k][i][j]=a[k][q[st].x][q[st].y]+1;
                parc[k][i][j]=1;
            }
        }
        ++st;
    }
}

int main()
{
    ifstream cin("rj.in");
    ofstream cout("rj.out");
    char c;
    int i,j,x1,x2,y1,y2,ok;
    cin>>n>>m;
    cin.get(c);
    for(i=1;i<=n;++i){
        for(j=1;j<=m;++j){
            cin.get(c);
            if(c=='X'){
                a[1][i][j]=-1;
                a[2][i][j]=-1;
                parc[1][i][j]=-1;
                parc[2][i][j]=-1;
            }
            if(c=='R')
            {
                x1=i;
                y1=j;
            }
            if(c=='J'){
                x2=i;
                y2=j;
            }
        }
        if(c!='\n')
            cin.get(c);
    }
    lee(x1,y1,1);
    lee(x2,y2,2);
    int tmin=99999999;
    int x,y;
    for(i=1;i<=n;++i)
        for(j=1;j<=m;++j){
            if(a[1][i][j]==a[2][i][j] && a[1][i][j]>0){
                if(a[1][i][j]<tmin){
                    tmin=a[1][i][j];
                    x=i;
                    y=j;
                }
            }
        }
    cout<<tmin<<" "<<x<<" "<<y;
    return 0;
}