Cod sursa(job #2537203)

Utilizator andreibazavanAndrei Bazavan andreibazavan Data 3 februarie 2020 12:25:38
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.57 kb
#include <bits/stdc++.h>
#define NMAX 100
#define NDIR 8
#define NCOADA 512
#define BAZA256 256
#define INFINIT 10000
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int prim,ultim;
unsigned short coada[NCOADA];
char oras[NMAX+2][NMAX+2];
short romeo[NMAX+2][NMAX+2],julieta[NMAX+2][NMAX+2];
int dl[NDIR]={0,-1,-1,-1,0,1,1,1},dc[NDIR]={1,1,0,-1,-1,-1,0,1};
inline void enqueue(int l,int c){
coada[ultim]=1*BAZA256+c;
ultim=(ultim+1)%NCOADA;
}
inline int dequeue(){
int retval=coada[prim];
prim=(prim+1)%NCOADA;
return retval;
}
void distantelee(int l,int c,short dist[NMAX+2][NMAX+2]){
int d,i;
enqueue(l,c);
dist[l][c]=l;
do{
 l=dequeue();
 c=l%BAZA256;
 l/=BAZA256;
 d=dist[l][c];
 for(i=0;i<NDIR;i++)
    if(dist[l+dl[i]][c+dc[i]]==0 && oras[l+dl[i]][c+dc[i]]==' ')
 {
     enqueue(l+dl[i],c+dc[i]);
     dist[l+dl[i]][c+dc[i]]=d+l;
 }
}while(prim!=ultim);
}
int main()
{
    int n,m,l,c,lr,cr,lj,cj,lmeet,cmeet,mi;
    char x;
    fin>>n>>m;
    for(l=0;l<=n+1;l++)
        oras[l][0]=oras[l][m+1]='X';
    for(c=1;c<=m;c++)
        oras[0][c]=oras[n+1][c]='X';
    for(l=1;l<=n;l++)
    for(c=1;c<=m;c++)
    {
        fin>>oras[l][c];
        if(oras[l][c]=='R'){lr=l;cr=c;}
        else if(oras[l][c]=='J'){lj=l;cj=c;}
    }
    distantelee(lr,cr,romeo);
    distantelee(lj,cj,julieta);
    mi=INFINIT;
    for(l=1;l<=n;l++)
    for(c=1;c<=m;c++)
    if(romeo[l][c]==julieta[l][c] && romeo[l][c]>0 && romeo[l][c]<mi){lmeet=l;cmeet=c;mi=romeo[l][c];}
    fout << mi<<" "<<lmeet<<" "<<cmeet<<" " << endl;
    return 0;
}