Cod sursa(job #1002889)

Utilizator robertstrecheStreche Robert robertstreche Data 28 septembrie 2013 23:56:23
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.16 kb
#include <fstream>
#include <cstring>

using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int a[50000][101],bb[50000][101],b[50000][101],o,k,nr,okk,lc,cc,l,c,p,x[10000],y[10000],u,lenc,i,j,n,m,l1,l2,c1,c2;
char ccc;
short dx[9] = {0,-1,-1,-1,0,1,1,1,0};
short dy[9] = {0,-1,0,1,1,1,0,-1,-1};
int ok(int l,int c)
{
    if (l>0 && c>0 && l<=n && c<=m)return 1;
    return 0;
}
int main()
{
    f>>n>>m;
     f.get();
    for (i=1;i<=n;i++)
     {

         for (j=1;j<=m;j++)
      {
         f>>noskipws>>ccc;
          if (ccc=='R')
            l1=i,c1=j;
          if (ccc=='J')
            l2=i,c2=j;
          if (ccc=='X')
            a[i][j]=1;
      }
       while (ccc!='\n')
        f>>ccc;
    }
       p=1;
       u=1;
       y[1]=l1;
       x[1]=c1;
       b[l1][c1]=1;
       while (p<=u)
        { lc=y[p];
          cc=x[p];
          p++;

          for (i=1;i<=8;i++)
           {
               l=lc+dy[i];
               c=cc+dx[i];

               if (ok(l,c) && a[l][c]==0 && b[l][c]==0)
                {
                    b[l][c]=b[lc][cc]+1;
                    u++;
                    y[u]=l;
                    x[u]=c;

                }

           }

        }

       p=1;
       u=1;
       y[1]=l2;
       x[1]=c2;
       bb[l2][c2]=1;
       while (p<=u)
        { lc=y[p];
          cc=x[p];
          p++;

          for (i=1;i<=8;i++)
           {
               l=lc+dy[i];
               c=cc+dx[i];

               if (ok(l,c) && !a[l][c] && !bb[l][c])
                {
                    bb[l][c]=bb[lc][cc]+1;
                    u++;
                    y[u]=l;
                    x[u]=c;

                }
           }

        }
        b[l2][c2]--;
        if ((b[l2][c2])%2==0)
        g<<(b[l2][c2])/2+1<<" ",
        o=(b[l2][c2])/2+1;
        else
        g<<b[l2][c2]/2+2<<" ",
        o=b[l2][c2]/2+2;

        for (i=1;i<=n;i++)
        for (j=1;j<=m;j++)
          if (b[i][j]==o  && bb[i][j]==o)
          {
              g<<i<<" "<<j;
              i=n+1;
              j=m+1;
          }



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