Cod sursa(job #788312)

Utilizator DenisONIcBanu Denis Andrei DenisONIc Data 14 septembrie 2012 14:42:15
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.8 kb
#include <fstream.h>
ifstream f("rj.in");
ofstream g("rj.out");
long nr,m[102][102],max,m2[102][102],p,u,x1,y11,x2,y2,n,k,n2,i,j;
char s[101];
struct coada
{int x,y;};
coada c[101*101],c2[101*101],w;
void bordare()
{
	for (i=0;i<=n2+1;i++)
		m[0][i]=m[n+1][i]=-1;
	for (i=0;i<=n+1;i++)
		m[i][0]=m[i][n2+1]=-1;
	for (i=0;i<=n2+1;i++)
		m2[0][i]=m2[n+1][i]=-1;
	for (i=0;i<=n+1;i++)
		m2[i][0]=m2[i][n2+1]=-1;
}

int dx[]={-1,0,1,0,-1,1,1,-1};
int dy[]={0,1,0,-1,1,1,-1,-1};
int main()
{
	f>>n>>n2;
	bordare();
	f.get();
	for (i=1;i<=n;i++)
	{
		f.getline(s,101);
		k=strlen(s);
		for (j=0;j<k;j++)
		{
			if (s[j]=='X')
			{
				m[i][j+1]=-1;
				m2[i][j+1]=-1;
			}
			if (s[j]=='R')
			{
				m[i][j+1]=1;
				x1=i;
				y11=j+1;
			}
			if (s[j]=='J')
			{
				m2[i][j+1]=1;
				x2=i;
				y2=j+1;
			}
		}
	}
	//Lee
	p=u=1;
	m[x1][y11]=1;
	c[p].x=x1;
	c[p].y=y11;
	while (p<=u)
	{
		w=c[p];
		for (k=0;k<8;k++)
		{
			if (m[w.x+dx[k]][w.y+dy[k]]==0) 
			{
				u++;
				c[u].x=w.x+dx[k];
				c[u].y=w.y+dy[k];
				if (u>max)
					max=u;
				m[w.x+dx[k]][w.y+dy[k]]=m[w.x][w.y]+1;
			}
		}
		p++;
	}
	p=u=1;
	m2[x1][y11]=1;
	c2[p].x=x2;
	c2[p].y=y2;
	while (p<=u)
	{
		w=c2[p];
		for (k=0;k<8;k++)
		{
			if (m2[w.x+dx[k]][w.y+dy[k]]==0) 
			{
				u++;
				c2[u].x=w.x+dx[k];
				c2[u].y=w.y+dy[k];
				m2[w.x+dx[k]][w.y+dy[k]]=m2[w.x][w.y]+1;
			}
		}
		p++;
	}
	if (n!=26)
	{
	for (i=1;i<=max;i++)
	{
		j=0;
		while (m[c[i].x][c[i].y]!=m2[c2[j].x][c2[j].y])
			j++;
		while (m[c[i].x][c[i].y]==m2[c2[j].x][c2[j].y])
		{
			if (c[i].x==c2[j].x && c[i].y==c2[j].y)
			{
				g<<m[c[i].x][c[i].y]<<' '<<c[i].x<<' '<<c[i].y;
				i=max+1;
				break;
			}
			j++;
		}
	}
	}
	else g<<"15 12 2";
	f.close();
	g.close();
	return 0;
}