Cod sursa(job #868876)

Utilizator DEYDEY2Tudorica Andrei DEYDEY2 Data 31 ianuarie 2013 18:46:02
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.57 kb
#include <fstream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int hr[101][101],hj[101][101],h[101][101],i,j,prx,pry,pjx,pjy,lq=1,k=1,n,m;
char c[201];
bool stop;
typedef struct coada{int x,y;};
coada q[100000001];
inline void sus()
{
    if(h[i-1][j]==0 && i!=1)
    {
        q[lq].x=i-1;
        q[lq].y=j;
        lq++;
        h[i-1][j]=k+1;
    }
}
inline void jos()
{
    if(h[i+1][j]==0 && i!=n)
    {
        q[lq].x=i+1;
        q[lq].y=j;
        lq++;
        h[i+1][j]=k+1;
    }
}
inline void stanga()
{
    if(h[i][j-1]==0 && j!=1)
    {
        q[lq].x=i;
        q[lq].y=j-1;
        lq++;
        h[i][j-1]=k+1;
    }
}
inline void dreapta()
{
    if(h[i][j+1]==0 && j!=m)
    {
        q[lq].x=i;
        q[lq].y=j+1;
        lq++;
        h[i][j+1]=k+1;
    }
}
inline void jos_dreapta()
{
    if(h[i+1][j+1]==0 && i!=n && j!=m)
    {
        q[lq].x=i+1;
        q[lq].y=j+1;
        lq++;
        h[i+1][j+1]=k+1;
    }
}
inline void jos_stanga()
{
    if(h[i+1][j-1]==0 && i!=n && j!=1)
    {
        q[lq].x=i+1;
        q[lq].y=j-1;
        lq++;
        h[i+1][j-1]=k+1;
    }
}

inline void sus_dreapta()
{
    if(h[i-1][j+1]==0 && i!=1 && j!=m)
    {
        q[lq].x=i-1;
        q[lq].y=j+1;
        lq++;
        h[i-1][j+1]=k+1;
    }
}

inline void sus_stanga()
{
    if(h[i-1][j-1]==0 && i!=1 && j!=1)
    {
        q[lq].x=i-1;
        q[lq].y=j-1;
        lq++;
        h[i-1][j-1]=k+1;
    }
}

inline void solve()
{
    for(int l=0;!stop;l++)
    {
        i=q[l].x;
        j=q[l].y;
        if(i==0 && j==0) stop=1;
        else
        {
            sus();
            jos();
            dreapta();
            stanga();
            sus_stanga();
            sus_dreapta();
            jos_stanga();
            jos_dreapta();
            if(!(h[q[l].x][q[l].y]==h[q[l+1].x][q[l+1].y]
                 ||h[q[l].x][q[l].y]==h[q[l+2].x][q[l+2].y]
                 ||h[q[l].x][q[l].y]==h[q[l+3].x][q[l+3].y]
                 ||h[q[l].x][q[l].y]==h[q[l+4].x][q[l+4].y]
                 ||h[q[l].x][q[l].y]==h[q[l+5].x][q[l+5].y]
                 ||h[q[l].x][q[l].y]==h[q[l+6].x][q[l+6].y]
                 ||h[q[l].x][q[l].y]==h[q[l+7].x][q[l+7].y]
                 ||h[q[l].x][q[l].y]==h[q[l+8].x][q[l+8].y])) k++;
        }
    }
}

int main()
{
    f>>n>>m;
    f.getline(c,200);
    for(i=1;i<=n;i++)
    {
        f.getline(c,200);
        for(j=1;j<=m;j++)
        {
            if(c[j-1]==' ') hj[i][j]=h[i][j]=hr[i][j]=0;
            if(c[j-1]=='X') hj[i][j]=h[i][j]=hr[i][j]=-1;
            if(c[j-1]=='R') {prx=i; pry=j;hj[i][j]=h[i][j]=hr[i][j]=-1;}
            if(c[j-1]=='J') {pjx=i; pjy=j;hj[i][j]=h[i][j]=hr[i][j]=-1;}
        }
    }
    q[0].x=prx;
    q[0].y=pry;
    solve();
   /* for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++) if(h[i][j]>=0 && h[i][j]<=9) g<<' '<<h[i][j]<<' '; else g<<h[i][j]<<' ';
        g<<'\n';
    }*/
    for(i=1;i<=n;i++)
    for(j=1;j<=m;j++) hr[i][j]=h[i][j];
    for(i=1;i<=n;i++)
    for(j=1;j<=m;j++) h[i][j]=hj[i][j];
    for(i=0;i<=lq;i++) q[i].x=q[i].y=0;
    lq=1;
    q[0].x=pjx;
    q[0].y=pjy;
    k=1;
    stop=0;
    solve();
    /*g<<'\n';
    g<<'\n';
    g<<'\n';
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++) if(h[i][j]>=0 && h[i][j]<=9) g<<' '<<h[i][j]<<' '; else g<<h[i][j]<<' ';
        g<<'\n';
    }*/
    for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)if(hr[i][j]==h[i][j] && h[i][j]!=-1 && h[i][j]){ g<<hr[i][j]<<' '<<i<<' '<<j<<'\n'; i=n;break;}
    return 0;
}