Cod sursa(job #2987799)

Utilizator NutaAlexandruASN49K NutaAlexandru Data 2 martie 2023 21:23:55
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.09 kb
#include <iostream>
#include <vector>
#include <queue>
#include <unordered_map>
#include <unordered_set>
#include <map>
#include <set>
#include <cmath>
#include <algorithm>
#include <functional>
#include <cassert>
using namespace std;
struct cord
{
    int y,x;
    bool in(int n,int m)
    {
        return (y>=0 && y<n && x>=0 && x<m);
    }
};
int dl[]={1,-1,0,0,1,1,-1,-1};
int dc[]={0,0,1,-1,1,-1,1,-1};
void get_ans(vector<vector<int>>&rez,const vector<string>&s,cord x,int n,int m)
{
    queue<cord>q;
    q.push(x);
    rez[x.y][x.x]=0;
    while(q.size())
    {
        cord then=q.front();
        q.pop();
        for(int i=0;i<8;i++)
        {
            cord acm={then.y+dl[i],then.x+dc[i]};
            if(acm.in(n,m) && s[acm.y][acm.x]!='X' && rez[acm.y][acm.x]==2e9)
            {
                rez[acm.y][acm.x]=rez[then.y][then.x]+1;
                q.push(acm);
            }
        }
    }

}
int solve()
{
    int n,m;
    cin>>n>>m;
    cin.get();
    vector<string>s(n);
    for(auto &c:s)c.resize(m);
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            s[i][j]=cin.get();
        }
        cin.get();
    }
    vector<vector<vector<int>>>rez(2,vector<vector<int>>(n,vector<int>(m,2e9)));
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(s[i][j]=='R')
            {
                get_ans(rez[0],s,{i,j},n,m);

            }
            if(s[i][j]=='J')
            {
                get_ans(rez[1],s,{i,j},n,m);
            }
        }
    }
    int minn=2e9;
    cord rezz;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(rez[0][i][j]==rez[1][i][j] && rez[0][i][j]<minn)
            {
                minn=rez[0][i][j];
                rezz={i,j};
            }
        }
    }
    cout<<minn+1<<' '<<rezz.y+1<<' '<<rezz.x+1;
}
main()
{
    auto sol=[](bool x)->string
    {
        if(x)return "Yes";
        return "No";
    };
    int tt=1;

    //cin>>tt;
    while(tt--)
    {
        solve();
    }
}