Pagini recente » Cod sursa (job #712213) | Cod sursa (job #2298667) | Cod sursa (job #2829653) | Cod sursa (job #321041) | Cod sursa (job #2987948)
#include <fstream>
#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;
ifstream cin("rj.in");
ofstream cout("rj.out");
struct cord
{
int y,x;
bool in(int n,int m)
{
return (y>=0 && y<n && x>=0 && x<m);
}
cord operator +(cord b)
{
return {y+b.y,x+b.x};
}
};
vector<cord>dir={
{1,0},
{-1,0},
{0,1},
{0,-1},
{1,1},
{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(auto &c:dir)
{
cord acm=then+c;
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)
{
getline(cin,c);
}
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();
}
}