Cod sursa(job #549844)

Utilizator Oancea.CatalinOancea Catalin Oancea.Catalin Data 8 martie 2011 23:36:21
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.23 kb
#include<fstream>
using namespace std;
fstream f("rj.in", ios::in),
		g("rj.out", ios::out);
long long i, j, n, m, romeo[101][101], julieta[101][101], xsj, ysj, xsr, ysr, retine_x[10001], retine_y[10001], retine_c[10001], k;
void lee(long long a[101][101], long long n, long long m, long long xs, long long ys)
{
	long long coada_x[10001], coada_y[10001], i, e;
	e=1;
	coada_x[e]=xs;
	coada_y[e]=ys;
	for(i=1; i<=e; i++)
	{
		if(a[coada_x[i]-1][coada_y[i]-1]==0 && coada_x[i]-1>=1 && coada_y[i]-1>=1 )
		{
			a[coada_x[i]-1][coada_y[i]-1]=a[coada_x[i]][coada_y[i]]+1;
			e++;
			coada_x[e]=coada_x[i]-1;
			coada_y[e]=coada_y[i]-1;
		}
		if(a[coada_x[i]-1][coada_y[i]]==0 && coada_x[i]-1>=1 )
		{
			a[coada_x[i]-1][coada_y[i]]=a[coada_x[i]][coada_y[i]]+1;
			e++;
			coada_x[e]=coada_x[i]-1;
			coada_y[e]=coada_y[i];
		}
		if(a[coada_x[i]-1][coada_y[i]+1]==0 && coada_x[i]-1>=1 && coada_y[i]+1<=m )
		{
			a[coada_x[i]-1][coada_y[i]+1]=a[coada_x[i]][coada_y[i]]+1;
			e++;
			coada_x[e]=coada_x[i]-1;
			coada_y[e]=coada_y[i]+1;
		}
		if(a[coada_x[i]][coada_y[i]-1]==0 && coada_y[i]-1>=1 )
		{
			a[coada_x[i]][coada_y[i]-1]=a[coada_x[i]][coada_y[i]]+1;
			e++;
			coada_x[e]=coada_x[i];
			coada_y[e]=coada_y[i]-1;
		}
		if(a[coada_x[i]][coada_y[i]+1]==0 && coada_y[i]+1<=m )
		{
			a[coada_x[i]][coada_y[i]+1]=a[coada_x[i]][coada_y[i]]+1;
			e++;
			coada_x[e]=coada_x[i];
			coada_y[e]=coada_y[i]+1;
		}
		if(a[coada_x[i]+1][coada_y[i]-1]==0 && coada_x[i]+1<=n && coada_y[i]-1>=1 )
		{
			a[coada_x[i]+1][coada_y[i]-1]=a[coada_x[i]][coada_y[i]]+1;
			e++;
			coada_x[e]=coada_x[i]+1;
			coada_y[e]=coada_y[i]-1;
		}
		if(a[coada_x[i]+1][coada_y[i]]==0 && coada_x[i]+1<=n )
		{
			a[coada_x[i]+1][coada_y[i]]=a[coada_x[i]][coada_y[i]]+1;
			e++;
			coada_x[e]=coada_x[i]+1;
			coada_y[e]=coada_y[i];
		}
		if(a[coada_x[i]+1][coada_y[i]+1]==0 && coada_x[i]+1<=n && coada_y[i]+1<=m )
		{
			a[coada_x[i]+1][coada_y[i]+1]=a[coada_x[i]][coada_y[i]]+1;
			e++;
			coada_x[e]=coada_x[i]+1;
			coada_y[e]=coada_y[i]+1;
		}
		
	}
	
}
int main()
{
	f>>n>>m;
	f.get();
	char a[n+1][m+1];
	for(i=1; i<=n; i++)
	{
		for(j=1; j<=m; j++)
			f.get(a[i][j]);
		f.get();
	}
	for(i=1; i<=n; i++)
	{
		for(j=1; j<=m; j++)
		{
			if(a[i][j]=='X')
				romeo[i][j]=-1;
			if(a[i][j]==' ')
				romeo[i][j]=0;
			if(a[i][j]=='R')
			{
				xsr=i;
				ysr=j;
				romeo[i][j]=1;
			}
			if(a[i][j]=='J')
				romeo[i][j]=0;
		}
	}
	for(i=1; i<=n; i++)
	{
		for(j=1; j<=m; j++)
		{
			if(a[i][j]=='X')
				julieta[i][j]=-1;
			if(a[i][j]==' ')
				julieta[i][j]=0;
			if(a[i][j]=='J')
			{
				xsj=i;
				ysj=j;
				julieta[i][j]=1;
			}
			if(a[i][j]=='R')
				julieta[i][j]=0;
		}
	}
	lee(romeo, n, m, xsr, ysr);
	lee(julieta, n, m, xsj, ysj);
	k=0;
	for(i=1; i<=n; i++)
	{
		for(j=1; j<=m; j++)
		{
			if(romeo[i][j]==julieta[i][j] && romeo[i][j]>0)
			{
				k++;
				retine_x[k]=i;
				retine_y[k]=j;
				retine_c[k]=romeo[i][j];
			}
		}
	}
	long long minim, minx, miny;
	for(i=1; i<=k; i++)
	{
		if(retine_c[i]<minim)
		{
			minim=retine_c[i];
			minx=retine_x[i];
			miny=retine_y[i];
		}
	}
	g<<minim<<" "<<minx<<" "<<miny<<endl;
	
	f.close();
	g.close();
	return 0;
	
}