Cod sursa(job #2303864)

Utilizator DanutAldeaDanut Aldea DanutAldea Data 17 decembrie 2018 01:35:51
Problema Rj Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <fstream>
#include <cstring>
#include <cmath>
#define x first
#define y second
using namespace std;

ifstream fin("rj.in");
ofstream fout("rj.out");

int v[101][101];
int n,m,i,j,u,p,ic,jc,iv,jv;
char s[110];
pair <int,int> c[10001];
int d;
int di[8]={1,1,0,-1,-1,-1,0,  1};
int dj[8]={0,1,1, 1, 0,-1,-1,-1};

int main(){
    fin>>n>>m;
    for(i=1;i<=n;i++){
        fin.get();
        fin.get(s,101);
        for(j=0;j<m;j++){
            if(s[j]=='X')
                v[i][j+1]=-10000;
            if(s[j]=='R'){
                v[i][j+1]=1;
                c[++u].x=i;
                c[u].y=j+1;
            }
            if(s[j]=='J'){
                v[i][j+1]=-1;
                c[++u].x=i;
                c[u].y=j+1;
            }
        }
    }

    p=1;
    while(p<=u){
        ic=c[p].x; jc=c[p].y;
        for(d=0;d<8;d++){
            iv=ic+di[d]; jv=jc+dj[d];

            if(iv<=n && jv<=m && iv>=1 && jv>=1){
                if(v[iv][jv]==0){
                    if(v[ic][jc]>0)
                        v[iv][jv]=v[ic][jc]+1;
                    else
                        v[iv][jv]=v[ic][jc]-1;

                    u++;
                    c[u].x=iv; c[u].y=jv;
                }else{
                    if(v[iv][jv]+v[ic][jc]==-1 || v[iv][jv]+v[ic][jc]==1){
                        fout<<fabs(v[iv][jv])<<" "<<iv<<" "<<jv;
                        return 0;
                    }
                }
            }
        }

        p++;
    }

    return 0;
}