Cod sursa(job #2552942)

Utilizator cristina_ovidiuCristina Ovidiu Lucian cristina_ovidiu Data 21 februarie 2020 13:00:23
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in ("rj.in");
ofstream out("rj.out");

struct {int t=0,id=0;}v[105][105];

int n,m;

deque < pair<int,int> >p;

bool isI(int x,int y)
{
    return (x>0&&y>0&&x<=n&&y<=m);
}

void read()
{
    char x[106];
    in>>n>>m;
    in.getline(x,105);
    for(int i=1;i<=n;++i)
        {
            in.getline(x,105);
            for(int j=1;j<=m;++j)
                switch (x[j-1])
                {
                    case 'X':v[i][j].t=-1;break;
                    case ' ':v[i][j].t=0;break;
                    default:
                    {
                        v[i][j].t=1;
                        p.push_back(make_pair(i,j));
                        if(x[j-1]=='R')v[i][j].id=1;
                        else v[i][j].id=2;
                    }
                }
        }
}

void solve()
{
    int dx[]={-1,0,1,0},dy[]={0,1,0,-1};
    while(!p.empty())
    {
        int x=p.front().first,y=p.front().second;
        p.pop_front();
        for(int k=0;k<4;++k)
        {
            int nx=x+dx[k],ny=y+dy[k];
            if(isI(nx,ny)&&v[nx][ny].t!=-1)
                if(v[nx][ny].t==0)
                {
                    p.push_back(make_pair(nx,ny));
                    v[nx][ny].t=v[x][y].t+1;
                    v[nx][ny].id=v[x][y].id;
                }
                else if(v[nx][ny].id!=v[x][y].id)
                {
                    out<<v[x][y].t<<' '<<nx<<' '<<ny;
                    exit(0);
                }
        }
    }
}

int main()
{
    read();
    solve();
    return 0;
}