Cod sursa(job #2968640)

Utilizator reptilaMoise Andrei reptila Data 21 ianuarie 2023 18:11:47
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda pregatire_oji_1_2022 Marime 2.28 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("rj.in");
ofstream g("rj.out");
int dx[] = {-1, -1, 0, 1, 1, 1, 0, -1},
    dy[] = {0, 1, 1 ,1, 0, -1, -1, -1};
int n,m,cnt=1,h[102][102],is,js,ifi,jfi,ro[102][102],jl[102][102];
bool inmat(int i, int j){
    return (i >= 1 && i <= n && j >= 1 && j <= m);}
void citire();
void afisare();
void lee(int is, int js, int ifi, int jfi, int h[][102]);
void constructie(int is, int js, int ifi, int jfi);
int main()
{
    citire();
    //afisare();
    lee(is, js, ifi, jfi, ro);
    lee(ifi, jfi, is, js, jl);
    constructie(is, js, ifi, jfi);
    return 0;
}
void citire()
{
    f >> n >> m;
    char c;
    for(int i=0;i<=n+1;i++)
        h[i][0]=h[i][m+1]='X';
    for(int i=0;i<=m+1;i++)
        h[0][i]=h[n+1][i]='X';
    f.get(c);
    for (int i=1;i<=n;i++)
    {
        for (int j=1;j<=m;j++)
            {
                f.get(c);
                if(c == 'X'){
                ro[i][j] = -1; jl[i][j] = -1;
            }
            else if(c == 'R'){
                is = i; js = j;
            }
            else if(c == 'J'){
                ifi = i; jfi = j;
            }
            }
        f.get(c);
    }
}
void afisare()
{
    for (int i=0;i<=n+1;i++)
    {
        for (int j=0;j<=m+1;j++)
            g << h[i][j];
        g << "\n";
    }
}
void lee(int is, int js, int ifi, int jfi, int h[][102])
{
    queue<pair<int,int>> q;
    q.push(make_pair(is,js));
    while(q.empty() == 0){
        int i = q.front().first,
			j = q.front().second;
        for(int d = 0; d < 8; d++){
            int inou = i + dx[d],
				jnou = j + dy[d];
            if(inmat(inou, jnou) == 1 && h[inou][jnou] == 0 ){
                h[inou][jnou] = h[i][j] + 1;
                q.push(make_pair(inou, jnou));
            }
        }
        q.pop();
    }
    h[is][js] = 0;
}
void constructie(int is, int js, int ifi, int jfi){
    int minim = 2147483647, a, b;
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= m; j++){
            if(ro[i][j] != -1 && ro[i][j] != 0 && ro[i][j] == jl[i][j] && ro[i][j] < minim){
                minim = ro[i][j];
                a = i;
                b = j;
            }
        }
    }
    g << minim + 1 << " " << a << " " << b;
}