Cod sursa(job #2164414)

Utilizator tutuganTutugan Stefan Alexandru tutugan Data 12 martie 2018 23:31:58
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.57 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
int a[102][102],b[102][102];
int dl[8]= {-1,-1,0,+1,+1,+1,0,-1};
int dc[8]= {0,+1,+1,+1,0,-1,-1,-1};
struct lee
{
    int l,c;
} coadar[100*100+1],coadaj[100*100+1],pozcr,pozcj;
int main()
{
    ifstream fin("rj.in");
    ofstream fout("rj.out");
    int n,m,i,j,drr=0,str=0,drj=0,stj=0;
    char s[101];
    fin>>n>>m;
    fin.get();
    for(i=1; i<=n; i++)
    {
        fin.getline(s,101);
        for(j=1; j<=m; j++)
        {
            if(s[j-1]=='X')
                a[i][j]=b[i][j]=-1;
            else if(s[j-1]==' ')
                a[i][j]=b[i][j]=0;
            else if(s[j-1]=='R')
            {
                a[i][j]=1;
                coadar[drr]=(lee)
                {
                    i,j
                };
            }
            else if(s[j-1]=='J')
            {
                b[i][j]=1;
                coadaj[drj]=(lee)
                {
                    i,j
                };
            }
        }
    }
    for(i=0; i<=n+1; i++)
    {
        a[i][0]=b[i][0]=-1;
        a[i][m+1]=b[1][m+1]=-1;
    }
    for(i=0; i<=m+1; i++)
    {
        a[0][i]=b[0][i]=-1;
        a[n+1][i]=b[n+1][i]=-1;
    }
//    for(i=0;i<=n+1;i++)
//    {
//        for(j=0;j<=m+1;j++)
//        cout<<b[i][j]<<" ";
//        cout<<endl;
//    }
    int gasit=0,lj,cj,lr,cr,pasj,pasr,lcj,ccj,lcr,ccr,imax,jmax,val;
    while(!gasit)
    {
        pozcj=coadaj[stj];
        lj=pozcj.l;
        cj=pozcj.c;
        pasj=b[lj][cj];
        do
        {
            for(i=0; i<8; i++)
            {
                lcj=lj+dl[i];
                ccj=cj+dc[i];
                if(b[lcj][ccj]==0)
                {
                    drj++;
                    coadaj[drj]=(lee)
                    {
                        lcj,ccj
                    };
                    b[lcj][ccj]=pasj+1;
                    if(b[lcj][ccj]==a[lcj][ccj])
                    {
                        gasit=1;
                        imax=lcj;
                        jmax=ccj;
                        val=b[lcj][ccj];
                    }
                }
            }
            stj++;
            pozcj=coadaj[stj];
            lj=pozcj.l;
            cj=pozcj.c;

        }
        while(b[lj][cj]==pasj);
        pozcr=coadar[str];
        lr=pozcr.l;
        cr=pozcr.c;
        pasr=a[lr][cr];
        do
        {
            for(i=0; i<8; i++)
            {
                lcr=lr+dl[i];
                ccr=cr+dc[i];
                if(a[lcr][ccr]==0)
                {
                    drr++;
                    coadar[drr]=(lee)
                    {
                        lcr,ccr
                    };
                    a[lcr][ccr]=pasr+1;

                    if(b[lcr][ccr]==a[lcr][ccr])
                    {
                        gasit=1;
                        imax=lcr;
                        jmax=ccr;
                        val=a[lcr][ccr];
                    }
                }
            }
            str++;
            pozcr=coadar[str];
            lr=pozcr.l;
            cr=pozcr.c;
        }
        while(a[lr][cr]==pasr);

    }
//    for(i=0; i<=n+1; i++)
//    {
//        for(j=0; j<=m+1; j++)
//            cout<<b[i][j]<<" ";
//        cout<<endl;
//    }
//    cout<<endl<<endl;
//    for(i=0; i<=n+1; i++)
//    {
//        for(j=0; j<=m+1; j++)
//            cout<<a[i][j]<<" ";
//        cout<<endl;
//    }
    fout<<val<<" "<<imax<<" "<<jmax;
    return 0;
}