Cod sursa(job #401108)

Utilizator AnteusPatrascoiu Mihai Anteus Data 22 februarie 2010 14:00:59
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.88 kb
#include <stdio.h>
#include <string.h>
#include <values.h>
#define d=MININT;
FILE *f=fopen ("rj.in", "r");
FILE *g=fopen ("rj.out", "w");
int i,n,m,ri,rj,vi,vj,j;
char a[120];
int r[101[101],v[101][101];
struct coada ( int x,y,z; } c[20000];

void citire () {
int j;
fscanf (f, "%d%d", &n, &m);
for (i=1;i<=n;i++)
{
	fscanf (f, "%s", &a);
	for (j=0;j<=strlen(a)-1;j++)
	{
		if ( a[j]=='R')
		{
			r[i][j+1]=1;
			ri=i;  rj=j+1;
		}
		if ( a[j]=='J')
		{
			v[i][j+1]=1;
			vi=i;  vj=j+1;
		}
		if ( a[j]=='X')
			v[i][j+1]=d;
	}
}
}


int valid (int K, int v[101][101]) 
{
if (K==1)
	if ( (c[pr].x-1>0 && c[pr].y-1>0)
		 && ( v[c[pr].x-1][c[pr].y-1] < v[c[pr].x][c[pr].y]+1 ) )
		return 1;
if (K==2)
	if ( (c[pr].x-1>0 && c[pr].y+1<=m)
		 && ( v[c[pr].x-1][c[pr].y+1] < v[c[pr].x][c[pr].y]+1 ) )
		return 1;
if (K==3)
	if ( (c[pr].x+1<=n && c[pr].y-1>0)
		 && ( v[c[pr].x+1][c[pr].y-1] < v[c[pr].x][c[pr].y]+1 ) )
		return 1;
if (K==4)
	if ( (c[pr].x+1<=n && c[pr].y+1<=m)
		 && ( v[c[pr].x+1][c[pr].y+1] < v[c[pr].x][c[pr].y]+1 ) )
		return 1;
if (K==5)
	if ( c[pr].x-1>0
		 && ( v[c[pr].x-1][c[pr].y] < v[c[pr].x][c[pr].y]+1 ) )
		return 1;
if (K==6)
	if ( c[pr].x+1<=n
		 && ( v[c[pr].x+1][c[pr].y] < v[c[pr].x][c[pr].y]+1 ) )
		return 1;
if (K==7)
	if ( c[pr].y-1>0
		 && ( v[c[pr].x][c[pr].y-1] < v[c[pr].x][c[pr].y]+1 ) )
		return 1;
if (K==8)
	if ( c[pr].y+1<=m
		 && ( v[c[pr].x][c[pr].y+1] < v[c[pr].x][c[pr].y]+1 ) )
		return 1;
return 0;
}



void Lee (int pi, int pj, int v[101][101]) {
int pr=1,ult=1;
c[pr].x=pi;  c[pr].y=pj;

while (pr<=ult)
{
	if ( valid (1, v) )
	{
		ult++;  c[ult].x=c[pr].x-1;  c[ult].y=c[pr].y-1;
		v[c[ult].x][c[ult].y] = v[c[pr].x][c[pr].y]+1;
	}
	if ( valid (2, v) )
	{
		ult++;  c[ult].x=c[pr].x-1;  c[ult].y=c[pr].y+1;
		v[c[ult].x][c[ult].y] = v[c[pr].x][c[pr].y]+1;
	}
	if ( valid (3, v) )
	{
		ult++;  c[ult].x=c[pr].x+1;  c[ult].y=c[pr].y-1;
		v[c[ult].x][c[ult].y] = v[c[pr].x][c[pr].y]+1;
	}
	if ( valid (4, v) )
	{
		ult++;  c[ult].x=c[pr].x+1;  c[ult].y=c[pr].y+1;
		v[c[ult].x][c[ult].y] = v[c[pr].x][c[pr].y]+1;
	}
	if ( valid (5, v) )
	{
		ult++;  c[ult].x=c[pr].x-1;  c[ult].y=c[pr].y;
		v[c[ult].x][c[ult].y] = v[c[pr].x][c[pr].y]+1;
	}
	if ( valid (6, v) )
	{
		ult++;  c[ult].x=c[pr].x+1;  c[ult].y=c[pr].y;
		v[c[ult].x][c[ult].y] = v[c[pr].x][c[pr].y]+1;
	}
	if ( valid (7, v) )
	{
		ult++;  c[ult].x=c[pr].x;  c[ult].y=c[pr].y-1;
		v[c[ult].x][c[ult].y] = v[c[pr].x][c[pr].y]+1;
	}
	if ( valid (8, v) )
	{
		ult++;  c[ult].x=c[pr].x;  c[ult].y=c[pr].y+1;
		v[c[ult].x][c[ult].y] = v[c[pr].x][c[pr].y]+1;
	}
pr++;
}
}


int main() {
	
citire();
Lee(ri, rj, r);
Lee(vi, vj, v);
memset (c, 0, sizeof(c));

for (i=1;i<=n;i++)
	for (j=1;j<=m;j++)
	if (r[i][j]!=d)
		{
			r[i][j]-=v[i][j];
			if (!r[i][j])
				{
					k++;  c[k].x=i;  c[k].y=j;
				}
		}