Cod sursa(job #656724)

Utilizator desoComan Andrei deso Data 4 ianuarie 2012 23:47:07
Problema Rj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.14 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

#define INFILE "rj.in" 
#define OUTFILE "rj.out"

int map[101][101], n, m;
int r[2][2][900][2];

int main()
{
  freopen(INFILE, "r", stdin);
  freopen(OUTFILE, "w", stdout);
  memset(map, 0, sizeof(map));
  char str[128];
  cin >> n >> m;
  cin.getline(str, 128, '\n');
  int tmin = 1, xmin = n+1, ymin = m+1;
  r[0][1][0][0] = r[1][1][0][0] = 1;

  for(int i=0; i<n; i++)
  {
    cin.getline(str, 128, '\n');
    for(int j=0; j<m; j++)
    {
      switch(str[j]) {
        case 'X':
          map[i][j] = -1;
          break;
        case 'R':
          map[i][j] = 1;
          r[0][1][1][0] = i;
          r[0][1][1][1] = j;
          break;
        case 'J':
          map[i][j] = 2;
          r[1][1][1][0] = i;
          r[1][1][1][1] = j;
          break;
        default:
          map[i][j] = 0;
      };
    }
  }

  bool found = 0;
  tmin++;
  for(; !found; tmin++)
  {
    r[0][tmin%2][0][0] = r[1][tmin%2][0][0] = 0;
    for(int k=0; k<2; k++)
    for(int i=1; i<=r[k][(tmin+1)%2][0][0]; i++)
    {
      int x = r[k][(tmin+1)%2][i][0];
      int y = r[k][(tmin+1)%2][i][1];
      for(int xx = -1; xx<2; xx++)
      for(int yy = -1; yy<2; yy++)
        if( (xx || yy) && (x+xx>=0 && x+xx<n && y+yy>=0 && y+yy<m)  )
        {
          if( map[x+xx][y+yy]==0 )
          {
            map[x+xx][y+yy] = k+1;
            r[k][tmin%2][ ++r[k][tmin%2][0][0] ][0] = x+xx;
            r[k][tmin%2][ r[k][tmin%2][0][0] ][1] = y+yy;
          }
          else if ( map[x+xx][y+yy]==1 && 1==k )
          {
            found = 1;
            /*cout << "f " << x+xx << " " << y+yy << "\n";*/
            if( x+xx<xmin || (x+xx==xmin && y+yy<ymin ) )
            {
              xmin = x+xx;
              ymin = y+yy;
            }
          }
        }
    }
    /*cout << '\n';
    for(int i=0; i<n; i++)
    {
      for(int j=0; j<m; j++)
        cout << map[i][j] << " " ;
      cout << '\n';
    }
    cout << tmin << "\n";*/
  }

  cout << tmin-1 << " " << xmin+1 << " " << ymin+1 << "\n";

  return 0;
}