#include <iostream>
using namespace std;
struct coordonata
{
    int x,y;
};
#define dim 1505
int a[dim][dim],st[dim][dim],dr[dim][dim],jos[dim][dim],sus[dim][dim];
int W,H,K,L;
bool viz[dim][dim];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
bool ok(int x,int y)
{
    if(x>=0 && x<H && y>=0 && y<W)
        return true;
    return false;
}
bool transfer(int x,int y,int xn,int yn)
{
    if(y==yn)
    {
        ///Orizontal
        int mini,maxi;
        maxi=max(st[x][y]+1,st[xn][yn]+1);
        mini=min(dr[x][y],dr[xn][yn]);
        if(mini-maxi>=K)
            return true;
        return false;
    }
    else
    {
        ///Vertical
        int mini,maxi;
        maxi=max(sus[x][y]+1,sus[xn][yn]+1);
        mini=min(jos[x][y],jos[xn][yn]);
        if(mini-maxi>=L)
            return true;
        return false;
    }
}
void parcurgere(int x,int y)
{
    int xn,yn;
    viz[x][y]=1;
    for(int i=0;i<4;i++)
    {
        xn=x+dx[i];
        yn=y+dy[i];
        if(ok(xn,yn)==true && viz[xn][yn]==0 && a[xn][yn]==0 && transfer(x,y,xn,yn)==true)
        {
            parcurgere(xn,yn);
        }
    }
}
void init()
{
    int i,poz,j;
    for(i=0;i<H;i++)
    {
        poz=-1;
        for(j=0;j<W;j++)
        {
            if(a[i][j]==1)
                poz=j;
            st[i][j]=poz;
        }
        poz=W;
        for(j=W-1;j>=0;j--)
        {
            if(a[i][j]==1)
                poz=j;
            dr[i][j]=poz;
        }
    }
    for(j=0;j<W;j++)
    {
        poz=-1;
        for(i=0;i<H;i++)
        {
            if(a[i][j]==1)
                poz=i;
            sus[i][j]=poz;
        }
        poz=H;
        for(i=H-1;i>=0;i--)
        {
            if(a[i][j]==1)
                poz=i;
            jos[i][j]=poz;
        }
    }
}
int main()
{
    coordonata h,v,target,intersectie;
    int i,j;
    string s;
    cin>>W>>H>>K>>L;
    cin>>h.x>>h.y>>v.x>>v.y;
    for(i=0;i<H;i++)
    {
        cin>>s;
        for(j=0;j<s.length();j++)
        {
            if(s[j]=='.')
            {
                a[i][j]=0;
            }
            else if(s[j]=='X')
            {
                a[i][j]=1;
            }
            else
            {
                a[i][j]=0;
                target.x=i;
                target.y=j;
            }
        }
    }
    init();
    intersectie.x=h.y;
    intersectie.y=v.x;
    parcurgere(intersectie.x,intersectie.y);
    if(viz[target.x][target.y]==0)
        cout<<"NO";
    else
        cout<<"YES";
    return 0;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |