Cod sursa(job #580184)

Utilizator a_h1926Heidelbacher Andrei a_h1926 Data 12 aprilie 2011 19:58:29
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.15 kb
#include <iostream>
#include <cstdio>

using namespace std;

int OrasR[102][102], OrasJ[102][102], Sl=30000;
short N, M, Rx, Ry, Jx, Jy, Sx=200, Sy=200;

void Citire ()
{
	FILE *fin = fopen ("rj.in", "r");
	short i, j;
	char c;
	fscanf (fin, "%d %d\n", &N, &M);
	for (i=0; i<=N+1; i++)
	{
		OrasR[i][0]=-1;
		OrasR[i][M+1]=-1;
		OrasJ[i][0]=-1;
		OrasJ[i][M+1]=-1;
	}
	for (i=0; i<=M+1; i++)
	{
		OrasR[0][i]=-1;
		OrasR[N+1][i]=-1;
		OrasJ[0][i]=-1;
		OrasJ[N+1][i]=-1;
	}
	for (i=1; i<=N; i++)
	{
		for (j=1; j<=M; j++)
		{
			fscanf (fin, "%c", &c);
			if (c=='X')
			{
				OrasR[i][j]=-1;
				OrasJ[i][j]=-1;
			}
			if (c=='R')
			{
				OrasR[i][j]=1;
				Rx=i;
				Ry=j;
			}
			if (c=='J')
			{
				OrasJ[i][j]=1;
				Jx=i;
				Jy=j;
			}
		}
		fscanf (fin, "%c", &c);
	}
	fclose (fin);
}

void Afisare ()
{
	FILE *fout = fopen ("rj.out", "w");
	fprintf (fout, "%d %d %d\n", Sl, Sx, Sy);
	fclose (fout);
}

void Lee (int RJ)
{
	short n, L[10005], C[10005], xd[8]={-1, -1, 0, 1, 1, 1, 0, -1}, yd[8]={0, 1, 1, 1, 0, -1, -1, -1}, x, y, xnou, ynou, i, j;
	for (i=0; i<10000; i++)
	{
		L[i]=0;
		C[i]=0;
	}
	n=0;
	if (RJ==0)
	{
		L[n]=Rx;
		C[n]=Ry;
	}
	else
	{
		L[n]=Jx;
		C[n]=Jy;
	}
	n++;
	for (i=0; i<n; i++)
	{
		x=L[i];
		y=C[i];
		for (j=0; j<8; j++)
		{
			xnou=x+xd[j];
			ynou=y+yd[j];
			if (RJ==0)
			{
				if (OrasR[xnou][ynou]==0)
				{
					OrasR[xnou][ynou]=OrasR[x][y]+1;
					L[n]=xnou;
					C[n]=ynou;
					n++;
				}
			}
			else
			{
				if (OrasJ[xnou][ynou]==0)
				{
					OrasJ[xnou][ynou]=OrasJ[x][y]+1;
					L[n]=xnou;
					C[n]=ynou;
					n++;
				}
			}
		}
	}
}

int main ()
{
	short i, j;
	Citire ();
	Lee(0);
	Lee(1);
	for (i=1; i<=N; i++)
	{
		for (j=1; j<=M; j++)
		{
			if ((OrasR[i][j]==OrasJ[i][j])&&(OrasR[i][j]>1))
			{
				if (OrasR[i][j]==Sl)
				{
					if (i==Sx)
					{
						if (j<Sy)
						{
							Sy=j;
						}
					}
					if (i<Sx)
					{
						Sx=i;
						Sy=j;
					}
				}
				if (OrasR[i][j]<Sl)
				{
					Sx=i;
					Sy=j;
					Sl=OrasR[i][j];
				}
			}
		}
	}
	Afisare ();
	return 0;
}