Cod sursa(job #549031)

Utilizator shnakoVlad Schnakovszki shnako Data 8 martie 2011 08:56:31
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.02 kb
#include <stdio.h>
FILE *f=fopen("rj.in", "r"), *g=fopen("rj.out", "w");
short a[101][101], b[101][101], m, n, t1, sw, i, j;
short x[101], y[101], x1[101], y1[101], xa, ya, xb, yb, t, r, rahat_de_x, jeg_de_y;
int dl[]={0, -1, -1, -1, 0, 1, 1,  1,  0};
int dc[]={0, -1,  0,  1, 1, 1, 0, -1, -1};
char xxx;

void memset(short z[101], short er, short n)
{
	for (int i=1;i<=n;i++)
		z[i]=er;
}

void memcpy(short z[101], short zz[101], short n)
{
	for (int i=1;i<=n;i++)
		z[i]=zz[i];
}

void drum(short v[101][101], int a, int b)
{
	for (int i=1;i<=8;i++)
		if (a+dl[i]>0&&a+dl[i]<=m&&b+dc[i]>0&&b+dc[i]<=n)
			if (v[a+dl[i]][b+dc[i]]==0)
			{
					v[a+dl[i]][b+dc[i]]=v[a][b]+1;
					x1[++t1]=a+dl[i];
					y1[t1]=b+dc[i];
			}
			else
				if (v[a+dl[i]][b+dc[i]]==-3||v[a+dl[i]][b+dc[i]]==-2)
				{
					r=v[a][b];
					sw=1;
				}
}

void lee(short v[101][101], int xx, int yy)
{
	t=1;
	memset(x,  0, 100);
	memset(y,  0, 100);
	memset(x1,  0, 100);
	memset(y1,  0, 100);
	sw=0;
	x[1]=xx;
	y[1]=yy;
	v[xx][yy]=0;
	while(!sw)
	{
		for (int i=1;i<=t;i++)
			drum(v, x[i], y[i]);
		v[xx][yy]=-5;
		t=t1;
		t1=0;
		memcpy(x, x1, 100);
		memcpy(y, y1, 100);
		memset(x1,  0, 100);
		memset(y1,  0, 100);
	}
}

void citeste()
{
	fscanf(f, "%hd%hd", &m, &n);
	for (i=1;i<=m;i++)
	{
		fscanf(f, "%c", &xxx);
		for (j=1;j<=n;j++)
		{
			fscanf(f, "%c", &xxx);
			if (xxx=='X')
				a[i][j]=-1;
			else
				if (xxx=='J')
				{
					xa=i;
					ya=j;
					a[i][j]=-2;
				}
				else
					if (xxx=='R')
					{
						a[i][j]=-3;
						xb=i;
						yb=j;
					}
		}
		memcpy(b[i], a[i], 101);
	}
}

void tipareste()
{
	sw=0;
	for (i=1;i<=m;i++)
	{
		for (j=1;j<=n;j++)
			if (a[i][j]==b[i][j]&&a[i][j]==r)
			{
				fprintf(g, "%d %d %d", r+1, i, j);
				sw=1;
				break;
			}
		if (sw)
			break;
	}
	fclose(f);
	fclose(g);
}

int main()
{
	citeste();
	rahat_de_x=xb;
	jeg_de_y=yb;
	lee(a, xa, ya);
	lee(b, rahat_de_x, jeg_de_y);
	r=r/2+1;
	tipareste();
	return 0;
}