Pagini recente » Cod sursa (job #177064) | Monitorul de evaluare | Monitorul de evaluare | Statistici Nan Mihai (Nan_Mihai_324CC) | Cod sursa (job #1993731)
#include <iostream>
#include <cmath>
#include <fstream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
string z;
short n, m, i, j, nr, rj[103][103], prim, ultim, k, t, x, y;
short dl[]={-1, -1, 0, 1, 1, 1, 0, -1}, cl[]={0, -1, -1, -1, 0, 1, 1, 1};
struct oras
{ short lin, col; } c[120000], pr, pj, ve, p;
int main () {
fin >> n >> m;
getline(fin, z);
for (i = 1; i <= n; i++)
{
getline(fin, z);
for (j = 0; j < z.size(); j++)
{
if (z[j]=='R')
{ pr.lin = i; pr.col = j+1; }
if (z[j]=='J')
{ pj.lin = i; pj.col = j+1; }
else if (z[j]=='X')
rj[i][j+1] = 10017;
else rj[i][j+1]=0;
}
}
rj[pr.lin][pr.col]=-1;
rj[pj.lin][pj.col]=1;
c[1]=pr; c[0]=pj;
prim=0; ultim=1;
bool ok = 0;
while (ok == 0 || nr != 102)
{
p=c[prim]; prim++;
for (k = 0; k < 8; k++)
{
ve.lin = p.lin+dl[k]; ve.col = p.col+cl[k];
if (((rj[ve.lin][ve.col] > 0 && rj[p.lin][p.col] < 0) || (rj[ve.lin][ve.col] < 0 && rj[p.lin][p.col] > 0)) && rj[ve.lin][ve.col] != 10017 && (abs(rj[ve.lin][ve.col]) == t || ok == 0))
{
if (ve.lin < x || ok == 0) { x = ve.lin; y = ve.col; }
if (ve.lin == x && ve.col < y) y = ve.col;
t = abs(rj[ve.lin][ve.col]); ok = 1;
}
if (rj[ve.lin][ve.col] == 0 && ve.lin > 0 && ve.lin <= n && ve.col > 0 && ve.col <= n)
{
if (rj[p.lin][p.col] > 0) rj[ve.lin][ve.col]=rj[p.lin][p.col]+1;
if (rj[p.lin][p.col] < 0) rj[ve.lin][ve.col]=rj[p.lin][p.col]-1;
ultim++; c[ultim]=ve;
}
}
if (ok == 1) nr++;
}
fout << t << " " << x << " " << y << "\n";
}