Cod sursa(job #648662)

Utilizator dutzulBodnariuc Dan Alexandru dutzul Data 13 decembrie 2011 22:24:23
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.16 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,p1,p2,q1,q2,qq1,qq2;
int h2,codi[3000],codj[3000],w1,s,codi2[3000],codj2[3000];
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;
                q1=i;
                q2=j+1;
            }
            if (st[j]=='J') {
                a[i][j+1]=1;
                xi=i;
                xj=j+1;
                qq1=i;
                qq2=j;
            }
        }
    }
    for(i=0; i<=n+1; i++)
        for(j=0; j<=m+1; j++)
            a2[i][j]=a[i][j];

    p1=codi2[1];
    p2=codj[1];
    a2[p1][p2]=-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=33333;
a[q1][q2]=-8;
a[qq1][qq2+1]=-8;

    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;
}