Cod sursa(job #2888753)

Utilizator e_ggIonescu Dorian e_gg Data 11 aprilie 2022 20:07:57
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.23 kb
#include<bits/stdc++.h>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
queue<pair<int,int>> q;
int romeo[102][102],julieta[102][102];
int mini[102][102];
int n,m;
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
void bordare(){
    for(int i=0;i<=n+1;i++){
        mini[i][0]=1;
        mini[i][m+1]=1;
    }
    for(int i=0;i<=m+1;i++){
        mini[0][i]=1;
        mini[n+1][i]=1;
    }
}
void romeosLee(int x,int y){
    int newx,newy;
    q.push({x,y});
    while(!q.empty()){
        x=q.front().first;
        y=q.front().second;
        q.pop();
        for(int i=0;i<4;i++){
            newx=x+dx[i];
            newy=y+dy[i];
            if(mini[newx][newy]==-1&&(romeo[newx][newy]==0||romeo[newx][newy]>romeo[x][y]+1)){
                romeo[newx][newy]=romeo[x][y]+1;
                q.push({newx,newy});
            }
        }
    }
}
void julietasLee(int x,int y){
    int newx,newy;
    q.push({x,y});
    while(!q.empty()){
        x=q.front().first;
        y=q.front().second;
        q.pop();
        for(int i=0;i<4;i++){
            newx=x+dx[i];
            newy=y+dy[i];
            if(mini[newx][newy]==-1&&(julieta[newx][newy]==0||julieta[newx][newy]>julieta[x][y]+1)){
                julieta[newx][newy]=julieta[x][y]+1;
                q.push({newx,newy});
            }
        }
    }
}
int main()
{
    int ok;
    char c;
    f>>n>>m;
    f.get();
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m||c!='\n';j++){
            f.get(c);
            if(c=='R')
                mini[i][j]=2;
            if(c=='J')
                mini[i][j]=3;
            if(c=='X')
                mini[i][j]=4;
            if(c==' ')
                mini[i][j]=-1;
        }
    }
    bordare();
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++){
            if(mini[i][j]==2)
                romeosLee(i,j);
            if(mini[i][j]==3)
                julietasLee(i,j);
        }
    ok=1;
    for(int i=1;i<=n&&ok;i++)
        for(int j=1;j<=m&&ok;j++)
            if(romeo[i][j]!=0&&romeo[i][j]==julieta[i][j]){
                g<<julieta[i][j]<<' '<<i<<' '<<j<<'\n';
                ok=0;
            }
    f.close();
    g.close();
    return 0;
}