Cod sursa(job #2135692)

Utilizator MihneaGhiraMihnea MihneaGhira Data 19 februarie 2018 02:46:33
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.91 kb
#include<fstream>
#include<cstring>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n,m,x1,x2,y1,y2,s,p,ic,iv,jc,jv;
char x;
int mini,minj,minim;
int a1[101][101],a2[101][101],c[2][100001];

int di[]={-1,-1,0,1,1,1,0,-1};
int dj[]={0,1,1,1,0,-1,-1,-1};

int main(){
    fin>>n>>m;
    fin.get(x);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            fin.get(x);
            if(x=='X')
                a1[i][j]=a2[i][j]=-1;
            if(x=='R'){
                x1=i;
                y1=j;
            }
            if(x=='J'){
                x2=i;
                y2=j;
            }
        }
        if(x=='X'||x=='R'||x=='J')
            fin.get(x);
    }

    c[0][1]=x1;
    c[1][1]=y1;
    a1[x1][y1]=1;
    s=p=1;
    while(s<=p){
        ic=c[0][s];
        jc=c[1][s];
        for(int d=0;d<=7;d++){
            iv=ic+di[d];
            jv=dj[d]+jc;
            if(iv>=1&&iv<=n&&jv>=1&&jv<=m&&a1[iv][jv]==0){
                c[0][++p]=iv;
                c[1][p]=jv;
                a1[iv][jv]=1+a1[ic][jc];
            }
        }
        s++;
    }
    for(int i=1;i<=s;i++)
        c[0][i]=c[1][i]=0;
    c[0][1]=x2;
    c[1][1]=y2;
    s=p=1;
    a2[x2][y2]=1;
    while(s<=p){
        ic=c[0][s];
        jc=c[1][s];
        for(int d=0;d<=7;d++){
            iv=ic+di[d];
            jv=dj[d]+jc;
            if(iv>=1&&iv<=n&&jv>=1&&jv<=m&&a2[iv][jv]==0){
                c[0][++p]=iv;
                c[1][p]=jv;
                a2[iv][jv]=1+a2[ic][jc];
            }
        }
        s++;
    }
    minim=2000000000;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(a1[i][j]==a2[i][j]&&a1[i][j]<minim&&a1[i][j]>0){
                minim=a1[i][j];
                mini=i;
                minj=j;
            }
        }
    }
    fout<<minim<<" "<<mini<<" "<<minj;
    return 0;
}