Cod sursa(job #2342871)

Utilizator RazvanChirilaRazvan RazvanChirila Data 13 februarie 2019 14:33:29
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.2 kb
#include<bits/stdc++.h>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");

int di[8]={0,-1,-1,-1,0,1,1,1},ri,rj,juli,julj;
int dj[8]={1,1,0,-1,-1,-1,0,1};
int a[105][105],n,m,rom[105][105],jul[105][105];
char s[101];

void R_LEE()
{
    int i,j;
    struct casuta{int i,j;}q[10005];
    int inceput=1; int sfarsit=1;
    q[1].i=ri;q[1].j=rj;
    while(inceput<=sfarsit)
    {
        i=q[inceput].i;
        j=q[inceput].j;
        for(int k=0;k<8;k++)
            {
                int ii=i+di[k];
                int jj=j+dj[k];
                if(ii>=1 && ii<=n && jj>=1 && jj<=m && rom[ii][jj]==0)
                    {
                        rom[ii][jj]=rom[i][j]+1;
                        q[++sfarsit].i=ii;
                        q[sfarsit].j=jj;
                    }
            }
        inceput++;
    }
}

void J_LEE()
{
    int i,j;
    struct casuta{int i,j;}q[10005];
    int inceput=1; int sfarsit=1;
    q[inceput].i=juli; q[inceput].j=julj;
    while(inceput<=sfarsit)
    {
        i=q[inceput].i;
        j=q[inceput].j;
        for(int k=0;k<8;k++)
        {
                int ii=i+di[k];
                int jj=j+dj[k];
                if(ii>=1 && ii<=n && jj>=1 && jj<=m && jul[ii][jj]==0)
                    {
                        jul[ii][jj]=jul[i][j]+1;
                        q[++sfarsit].i=ii;
                        q[sfarsit].j=jj;
                    }
        }
        inceput++;
    }
}

int main()
{
    f>>n>>m;
    f.get();
    int i,j;
    for(i=1;i<=n;i++)
    {
        f.getline(s,101);
        for(j=0;s[j];j++)
            if(s[j]=='X')a[i][j+1]=1;
                 else if(s[j]=='R'){a[i][j+1]=1;ri=i;rj=j+1;}
                      else if(s[j]=='J'){a[i][j+1]=1;juli=i;julj=j+1;}
    }

    ///copiere rom si jul
    for(i=0;i<=n+1;i++)
    {
        for(j=0;j<=m+1;j++)
        {
          rom[i][j]=jul[i][j]=a[i][j];
        }
    }

    R_LEE();
    J_LEE();

    int dmin=n*m+1,imin,jmin;
    for(i=1;i<=n;i++)
      for(j=1;j<=m;j++)
        if(rom[i][j]==jul[i][j] && rom[i][j]>1)
              if(dmin>rom[i][j]){dmin=rom[i][j];imin=i;jmin=j;}

    g<<dmin<<' '<<imin<<' '<<jmin;
}