Cod sursa(job #3005277)

Utilizator Remus.RughinisRemus Rughinis Remus.Rughinis Data 16 martie 2023 20:56:03
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda simulare_oji_2023_clasa_10_16_martie Marime 1.73 kb
#include <iostream>
#include <fstream>
#define MAXN 100
#define MOD 512

int c[MOD][2], st, dr;
bool v[MAXN + 2][MAXN + 2];
int d[MAXN + 2][MAXN + 2][2];

int rlin, rcol, jlin, jcol;

using namespace std;

int lindir[8] = {-1, -1, -1, 0, 0, 1, 1, 1};
int coldir[8] = {-1, 0, 1, -1, 1, -1, 0, 1};

void lee(int id){
  int lin, col;
  st = 0;
  dr = 1;
  if(id == 0){
    c[0][0] = rlin;
    c[0][1] = rcol;
  } else{
    c[0][0] = jlin;
    c[0][1] = jcol;
  }

  d[c[0][0]][c[0][1]][id] = 1;

  while(st != dr){
    lin = c[st][0];
    col = c[st][1];
    st ++;
    st %= MOD;

    for(int dir = 0; dir < 8; dir ++){
      int nlin = lin + lindir[dir];
      int ncol = col + coldir[dir];
      if(v[nlin][ncol] && d[nlin][ncol][id] == 0){
        d[nlin][ncol][id] = d[lin][col][id] + 1;
        c[dr][0] = nlin;
        c[dr][1] = ncol;
        dr ++;
        dr %= MOD;
      }
    }
  }
}

int main(){
  char ch;
  int n, m, i, j, mini, minj, min;
  FILE *fin, *fout;

  fin = fopen("rj.in", "r");
  fscanf(fin, "%d%d", &n, &m);

  fgetc(fin);
  for(i = 1; i <= n; i ++){
    for(j = 1; j <= m; j ++){
      ch = fgetc(fin);
      if(ch == 'X')
        v[i][j] = 0;
      else{
        v[i][j] = 1;

        if(ch == 'R'){
          rlin = i;
          rcol = j;
        } else if(ch == 'J'){
          jlin = i;
          jcol = j;
        }
      }
    }
    fgetc(fin);
  }
  fclose(fin);

  lee(0);
  lee(1);

  min = -1;
  for(i = 1; i <= n; i ++){
    for(j = 1; j <= m; j ++){
      if(d[i][j][0] == d[i][j][1] && d[i][j][0] != 0 && (min == -1 || d[i][j][0] < min)){
        min = d[i][j][0];
        mini = i;
        minj = j;
      }
    }
  }

  fout = fopen("rj.out", "w");
  fprintf(fout, "%d %d %d\n", min, mini, minj);
  fclose(fout);

  return 0;
}