Cod sursa(job #1292569)

Utilizator test9cosmin Macovei test9 Data 14 decembrie 2014 14:58:52
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.32 kb
#include <fstream>
#include <bitset>
using namespace std;

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

int n,m,p1=1,p2=1,u1,u2,t,ok=1,x,y,xk,yk;
int r[103][103],j[103][103];
bitset<103> viz1[103];
bitset<103> viz2[103];
char w;
int c1[10003],c2[10003];
int dx[]={1,1,1,0,0,-1,-1,-1},dy[]={-1,0,1,-1,1,-1,0,1};
int main(){
    fin>>n>>m;
    fin.get(w);
    for(int i=1;i<=n;++i){
     for(int k=1;k<=m;++k){
        fin.get(w);
        if(w=='R'){
            viz1[i][k]=1;
            r[i][k]=1;
            t=i*1000+k;
            c1[++u1]=t;
        }
        if(w=='J'){
            viz2[i][k]=1;
            j[i][k]=1;
            t=i*1000+k;
            c2[++u2]=t;
        }
        if(w=='X'){
            viz1[i][k]=viz2[i][k]=1;
        }
    }
    fin.get(w);
    }
    for(int i=0;i<=n+1;++i){
        viz1[i][0]=viz2[i][0]=viz1[i][m+1]=viz2[i][m+1]=1;
    }
    for(int i=0;i<=m+1;++i){
        viz1[0][i]=viz2[0][i]=viz1[n+1][i]=viz2[n+1][i]=1;
    }
    while(ok){// && p1<=u1 && p2<=u2){
        t=c1[p1];
        p1++;
        x=t/1000;
        y=t%1000;
        for(int i=0;i<=7;++i){
            xk=x+dx[i];
            yk=y+dy[i];
            if(viz1[xk][yk]==0 && r[xk][yk]==0 ){
                t=1000*xk+yk;
                c1[++u1]=t;
                viz1[xk][yk]=1;
                r[xk][yk]=r[x][y]+1;
            }
        }
        t=c2[p2];
        p2++;
        x=t/1000;
        y=t%1000;
        for(int i=0;i<=7 && ok;++i){
                //if(ok==1){
            xk=x+dx[i];
            yk=y+dy[i];
            if(viz2[xk][yk]==0 && j[xk][yk]==0){
                t=1000*xk+yk;
                c2[++u2]=t;
                viz2[xk][yk]=1;
                j[xk][yk]=j[x][y]+1;
		        if(j[xk][yk]==r[xk][yk]) ok=0;
            }
            //for(int i=1;i<=n;++i)
             //for(int k=1;k<=m;++k){
               // if(j[xk][yk]==r[i][k]) ok=0;

               //}
        //}
        }
    }
    /*
    for(int i=1;i<=n;++i)
    {
        for(int k=1;k<=m;++k) fout<<r[i][k];
        fout<<'\n';
    }
    fout<<"\n\n";
    for(int i=1;i<=n;++i)
    {
        for(int k=1;k<=m;++k) fout<<j[i][k];
        fout<<'\n';
    }
    fout<<"\n\n";
    */
    fout<<j[xk][yk]<<' '<<xk<<' '<<yk<<'\n';
    fout.close();
    return 0;
}