Cod sursa(job #128655)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 27 ianuarie 2008 16:44:29
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.85 kb
#include <fstream.h>
#include <math.h>
#include <values.h>
const int l[9]={-1,-1,-1,0,0,1,1,1};
const int c[9]={1,0,-1,1,-1,1,-1,0};
long a[104][104];
long x[10000],y[10000],m,n,xmin,ymin,minute=MAXINT;
long nr=2;
  char mat[105][105];
void citire()
{
  ifstream fin("rj.in");
  fin>>m>>n;
  char c;
  fin.get(c);
  for (int p=0;p<=n;p++)
  {
      a[0][p]=MAXINT;
      a[m+1][p]=MAXINT;
  }

  for (int r=0;r<=m;r++)
  {
     a[r][0]=MAXINT;
     a[r][n+1]=MAXINT;
  }

   for (int i=0;i<m;i++)
       fin.getline(mat[i],103);

   for (int ii=0;ii<m;ii++)
     for (int j=0;j<n;j++)
     {
       if (mat[ii][j]=='J')
	   {
	      x[0]=ii+1;
	      y[0]=j+1;
	      a[ii+1][j+1]=-1;
	   }

	   if (mat[ii][j]=='R')
	   {
		x[1]=ii+1;
		y[1]=j+1;
		a[ii+1][j+1]=1;
	   }

	  if (mat[ii][j]=='X')
	     a[ii+1][j+1]=MAXINT;
     }

fin.close();
}
long mini(long a,long b)
{
   if (a<b)
      return a;
   return b;
}

void generare()
{

nr=2;
for (long i=0;i<nr;i++){
   for (int k=0;k<8;k++)
       if (a[x[i]+l[k]] [y[i]+c[k]]==0)
       {
	  x[nr++]=x[i]+l[k];
	  y[nr-1]=y[i]+c[k];
	  if (a[x[i]][y[i]]<0)
	      a[x[i]+l[k]][
	      y[i]+c[k]]=a[x[i]][y[i]]-1;
	  else
	      a[x[i]+l[k]][y[i]+c[k]]=a[x[i]][y[i]]+1;

       }
    }
}

void cauta()
{
    minute=31543;
   for (int i=1;i<=m;i++)
      for (int j=1;j<=n;j++)
	 if (a[i][j]!=MAXINT)
	 {
	     if (a[i][j]<0)
		for (int k=0;k<8;k++)
		   for (int o=k+1;o<8;o++)

		     if (a[i+l[k]][j+c[k]]==a[i+l[o]][j+c[o]]*(-1))
			{
			   if (fabs(a[i][j])<minute)
			   {
			       minute=fabs(a[i][j]);
			       xmin=i;
			       ymin=j;
			   }
			}
	 }
}

int main()
{
   ofstream fout("rj.out");
   citire();
   generare();
   cauta();
   fout<<minute<<" "<<xmin<<" "<<ymin<<"\n";
   fout.close();
   return 0;
}