Cod sursa(job #3158201)

Utilizator CraiuAndreiCraiu Andrei David CraiuAndrei Data 17 octombrie 2023 23:25:49
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.92 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");

int R[105][105],J[105][105],n,m;
string s;
queue<pair<int,int>> q;
int dx[] = {-1,-1,0,1,1,1,0,-1};
int dy[] = {0,1,1,1,0,-1,-1,-1};

int Nauntru(int x, int y)
{
    if(1<=x && 1<=y && x<=n && y<=m)return 1;
    return 0;
}

void Lee(int c[105][105])
{
    int x,y,i,j,k;
    while(!q.empty())
    {
        i=q.front().first;
        j=q.front().second;
        for(k=0;k<8;k++)
        {
            x=i+dx[k];
            y=j+dy[k];
            if(Nauntru(x,y)  && (c[x][y]==0 || c[x][y]>c[i][j]+1))
            {
                c[x][y]=c[i][j]+1;
                q.push(make_pair(x,y));
            }
        }
        q.pop();
    }
}

int main()
{
    int i,j,x,y,c=1e9;
    fin>>n>>m;
    fin.ignore();
    for(i=1;i<=n;i++)
    {
        getline(fin,s);
        for(j=0;j<m;j++)
        {
            if(s[j]=='X')R[i][j+1]=J[i][j+1]=-1;
            else if(s[j]=='R')
            {
                R[i][j+1]=1;
                q.push(make_pair(i,j+1));
                J[i][j+1]=0;
            }
            else if(s[j]=='J')
            {
                J[i][j+1]=1;
                x=i;y=j+1;
                R[i][j+1]=0;
            }
        }
         s.clear();
    }
    Lee(R);
    q.push(make_pair(x,y));
    Lee(J);
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            if((R[i][j]==J[i][j] || R[i][j]+1==J[i][j]) && c>R[i][j] && R[i][j]!=-1 && R[i][j]!=0)
            {
                x=i;y=j;c=R[i][j];
            }
    fout<<c<<" "<<x<<" "<<y;
    /*
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
            fout<<R[i][j]<<" ";
        fout<<"\n";
    }
    fout<<"\n";
    fout<<"\n";
    fout<<"\n";
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
            fout<<J[i][j]<<" ";
        fout<<"\n";
    }
    */
    return 0;
}