Cod sursa(job #2135688)

Utilizator MihneaGhiraMihnea MihneaGhira Data 19 februarie 2018 02:31:52
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.48 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;
short mini,minj,minim;
int a1[101][101],a2[101][101],c[2][100001];

char di[]={-1,-1,0,1,1,1,0,-1};
char 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;
    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<=n&&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;
    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<=n&&a2[iv][jv]==0){
                c[0][++p]=iv;
                c[1][p]=jv;
                a2[iv][jv]=1+a2[ic][jc];
            }
        }
        s++;
    }
    minim=1000;
    mini=105;
    minj=105;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(a1[i][j]==a2[i][j]&&a1[i][j]>0){
                if(minim>a1[i][j]){
                    minim=a1[i][j];
                    mini=i;
                    minj=j;
                }
                else{
                    if(minim==a1[i][j]){
                        if(mini>i){
                            mini=i;
                            minj=j;
                        }
                        else{
                            if(mini==i){
                                if(minj>j){
                                    minj=j;
                                    mini=i;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    fout<<minim+1<<" "<<mini<<" "<<minj;
    return 0;
}