Cod sursa(job #1327648)

Utilizator andrew_assassin789Andrei Manea andrew_assassin789 Data 26 ianuarie 2015 22:26:01
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.87 kb
#include <cstdio>
#include <queue>
using namespace std;
struct opr {int x,y;};
opr d[9],o,l;
queue <opr> c1;
queue <opr> c2;
short a[200][200];
int m,n,x1,y1,k=2,x2,y2;
void tr()
{
    int ok=0,ok1,ok2,ok3,ok4;
    int xi,yi,xf,yf,i,j;
    while (!ok)
    {
        ok1=ok2=ok3=ok4=1;
        xi=x1-k;xf=x1+k;
        yi=y1-k;yf=y1+k;
        if (yi<1) {ok1=0;yi=1;}
        if (xf>n) {ok2=0;xf=n;}
        if (yf>m) {ok3=0;yf=m;}
        if (xi<1) {ok4=0;xi=1;}
        if (ok1)
            for (i=xi;i<=xf;i++)
                if (a[i][yi]==0)
                {
                    a[i][yi]=1;
                    o.x=i;o.y=yi;
                    c1.push(o);
                }
        if (ok2)
            for (j=yi;j<=yf;j++)
              if (a[xf][j]==0)
                {
                    a[xf][j]=1;
                    o.x=xf;o.y=j;
                    c1.push(o);
                }
        if (ok3)
            for (i=xi;i<=xf;i++)
                if (a[i][yf]==0)
                {
                    a[i][yf]=1;
                    o.x=i;o.y=yf;
                    c1.push(o);
                }
        if (ok4)
            for (j=yi;j<=yf;j++)
                 if (a[xi][j]==0)
                {
                    a[xi][j]=1;
                    o.x=xi;o.y=j;
                    c1.push(o);
                }
        ok1=ok2=ok3=ok4=1;
        xi=x2-k;xf=x2+k;
        yi=y2-k;yf=y2+k;
        if (yi<1) {ok1=0;yi=1;}
        if (xf>n) {ok2=0;xf=n;}
        if (yf>m) {ok3=0;yf=m;}
        if (xi<1) {ok4=0;xi=1;}
        if (ok1)
            for (i=xi;i<=xf;i++)
                {
                    if (a[i][yi]==0)
                    {
                        a[i][yi]=2;
                        o.x=i;o.y=yi;
                        c2.push(o);
                    }
                    else if (a[i][yi]==1) {ok=1;x1=x2=i;y1=y2=yi;break;}
                }
        if (ok2)
            for (j=yi;j<=yf;j++)
              {
                  if (a[xf][j]==0)
                    {
                        a[xf][j]=2;
                        o.x=xf;o.y=j;
                        c2.push(o);
                    }
                  else if (a[xf][j]==1) {ok=1;x1=x2=xi;y1=y2=j;break;}
              }
        if (ok3)
            for (i=xi;i<=xf;i++)
                {
                    if (a[i][yf]==0)
                    {
                        a[i][yf]=2;
                        o.x=i;o.y=yf;
                        c2.push(o);
                    }
                    else if (a[i][yf]==1) {ok=1;x1=x2=i;y1=y2=yf;break;}
                }
        if (ok4)
            for (j=yi;j<=yf;j++)
                {
                    if (a[xi][j]==0)
                    {
                        a[xi][j]=2;
                        o.x=xi;o.y=j;
                        c1.push(o);
                    }
                    else if (a[xi][j]==1) {ok=1;x1=x2=xi;y1=y2=j;break;}
                }
        while (!c1.empty())
        {
            o=c1.front();
            if (a[o.x][o.y]==1) a[o.x][o.y]=0;
            c1.pop();
        }
        while (!c2.empty())
        {
            o=c2.front();
            if (a[o.x][o.y]==1) a[o.x][o.y]=0;
            c2.pop();
        }
        k++;
    }
}
int main()
{
    FILE *f,*g;
    f=freopen("rj.in","r",stdin);
    g=freopen("rj.out","w",stdout);
    int i,j;
    char c[105];
    fscanf(f,"%d%d",&n,&m);
    gets(c);
    c[m]=NULL;
    for (i=1;i<=n;i++)
        {
            gets(c);
            for (j=0;j<=m-1;j++)
            {
            if (c[j]=='X') a[i][j+1]=-1;
            else
                if(c[j]=='R') {x1=i;y1=j+1;}
                else
                    if (c[j]=='J') {x2=i;y2=j+1;}
            }
        }
    tr();
    fprintf(g,"%d %d %d\n",k,x1,y1);
    fclose(f);
    fclose(g);
    return 0;
}