Cod sursa(job #648045)

Utilizator dutzulBodnariuc Dan Alexandru dutzul Data 12 decembrie 2011 22:48:07
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.97 kb
#include <fstream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int n,m,i,j,t,Ji,Jj,a[140][140],Ri,Rj,h1,wi,a2[140][140],xi,xj,pozi,pozj,rez;
int h2,codi[1000],codj[1000],w1,s,codi2[1000],codj2[1000];
string st;

void ex() {
    h1=codi2[i];
    h2=codj2[i];
    s=a[h1][h2]+1;

    if (a[h1][h2-1]==0) {
        w1++;
        a[h1][h2-1]=s;
        codi[w1]=h1;
        codj[w1]=h2-1;
    }

    if (a[h1][h2+1]==0) {
        w1++;
        a[h1][h2+1]=s;
        codi[w1]=h1;
        codj[w1]=h2+1;
    }
    if (a[h1-1][h2]==0) {
        w1++;
        a[h1-1][h2]=s;
        codi[w1]=h1-1;
        codj[w1]=h2;
    }
    if (a[h1+1][h2]==0) {
        w1++;
        a[h1+1][h2]=s;
        codi[w1]=h1+1;
        codj[w1]=h2;
    }
    if (a[h1+1][h2+1]==0) {
        w1++;
        a[h1+1][h2+1]=s;
        codi[w1]=h1+1;
        codj[w1]=h2+1;
    }
    if (a[h1-1][h2-1]==0) {
        w1++;
        a[h1-1][h2-1]=s;
        codi[w1]=h1-1;
        codj[w1]=h2-1;
    }

    if (a[h1+1][h2-1]==0) {
        w1++;
        a[h1+1][h2-1]=s;
        codi[w1]=h1+1;
        codj[w1]=h2-1;
    }
    if (a[h1-1][h2+1]==0) {
        w1++;
        a[h1-1][h2+1]=s;
        codi[w1]=h1-1;
        codj[w1]=h2+1;
    }
}

int main() {
    f>>n>>m;
    f.get();

    for(i=0; i<=n+1; i++) {
        a[i][0]=-8;
        a[i][m+1]=-8;
    }

    for(i=0; i<=m+1; i++) {
        a[0][i]=-8;
        a[n+1][i]=-8;
    }

    for(i=1; i<=n; i++) {
        getline(f,st);
        for(j=0; j<m; j++) {
            if (st[j]=='X') a[i][j+1]=-8;

            if (st[j]=='R') {
                a[i][j+1]=1;
                wi=1;
                codi2[wi]=i;
                codj2[wi]=j+1;
            }
            if (st[j]=='J') {
                a[i][j+1]=1;
                xi=i;
                xj=j+1;
            }
        }
    }
    for(i=0; i<=n+1; i++)
        for(j=0; j<=m+1; j++)
            a2[i][j]=a[i][j];

a2[codi2[1]][codj2[1]]=-8;

    while (wi>0) {
        for(i=1; i<=wi; i++)
            ex();
        for(i=1; i<=w1; i++) {
            codi2[i]=codi[i];
            codj2[i]=codj[i];
        }
        wi=w1;
        w1=0;
    }

    for(i=0; i<=n+1; i++)
        for(j=0; j<=m+1; j++)
            swap(a2[i][j],a[i][j]);


    wi=1;
    w1=0;

    for(i=1; i<=2000; i++)
        codi[i]=0,codj[j]=0,codi2[i]=0,codi2[i]=0;

    codi2[1]=xi;
    codj2[1]=xj;

    while (wi>0) {
        for(i=1; i<=wi; i++)
            ex();
        for(i=1; i<=w1; i++) {
            codi2[i]=codi[i];
            codj2[i]=codj[i];
        }
        wi=w1;
        w1=0;
    }
    rez=333333;

    for(i=1; i<=n; i++)
        for(j=1; j<=m; j++)
            if (a[i][j]==a2[i][j]&&a[i][j]<rez&&a[i][j]>0) {
                rez=a[i][j];
                pozi=i;
                pozj=j;
            }

    g<<pozi<<" "<<pozj<<" "<<rez;

    f.close();
    g.close();
    return 0;
}