➤ Problem Link : 198B. Jumping on Walls
✅ C++ Solution :
#include<bits/stdc++.h>
using namespace std;
char lefty[100001];
char righty[100001];
bool flag=0;
void dfs(int v,bool wall,bool visitl[],bool visitr[],int n,int time,int k)
{
cout<<v<<" "<<wall<<endl;
if(v+k>n)
{
flag=1;
return;
}
if(!wall)
{
if(!visitl[v+1] && lefty[v+1]!='X')
{
visitl[v+1]=1;
dfs(v+1,wall,visitl,visitr,n,time+1,k);
}
if(!visitl[v-1] && lefty[v-1]!='X' && v-1>time+1)
{
visitl[v-1]=1;
dfs(v-1,wall,visitl,visitr,n,time+1,k);
}
if(!visitr[v+k] && righty[v+k]!='X')
{
visitr[v+k]=1;
dfs(v+k,1,visitl,visitr,n,time+1,k);
}
}
else
{
if(!visitr[v+1] && righty[v+1]!='X')
{
visitr[v+1]=1;
dfs(v+1,wall,visitl,visitr,n,time+1,k);
}
if(!visitr[v-1] && righty[v-1]!='X' && v-1>time+1)
{
visitr[v-1]=1;
dfs(v-1,wall,visitl,visitr,n,time+1,k);
}
if(!visitl[v+k] && lefty[v+k]!='X')
{
visitl[v+k]=1;
dfs(v+k,0,visitl,visitr,n,time+1,k);
}
}
}
void bfs(int v,bool wall,bool visitl[],bool visitr[],int n,int time,int k)
{
time=0;
queue<pair<int,int> >q;
q.push(make_pair(1,0));
while(!q.empty())
{
int size=q.size();
while(size--)
{
int v = q.front().first;
wall=q.front().second;
q.pop();
if(v+k>n)
{
flag=1;
return;
}
if(!wall)
{
if(!visitl[v+1] && lefty[v+1]!='X')
{
visitl[v+1]=1;
q.push(make_pair(v+1,0));
}
if(!visitl[v-1] && lefty[v-1]!='X' && v-1>time+1)
{
visitl[v-1]=1;
q.push(make_pair(v-1,0));
}
if(!visitr[v+k] && righty[v+k]!='X')
{
visitr[v+k]=1;
q.push(make_pair(v+k,1));
}
}
else
{
if(!visitr[v+1] && righty[v+1]!='X')
{
visitr[v+1]=1;
q.push(make_pair(v+1,1));
}
if(!visitr[v-1] && righty[v-1]!='X' && v-1>time+1)
{
visitr[v-1]=1;
q.push(make_pair(v-1,1));
}
if(!visitl[v+k] && lefty[v+k]!='X')
{
visitl[v+k]=1;
q.push(make_pair(v+k,0));
}
}
}
time++;
}
}
int main()
{
int n,k;
cin>>n>>k;
for(int i=1;i<=n;i++)
cin>>lefty[i];
for(int i=1;i<=n;i++)
cin>>righty[i];
bool visitl[n+1]={0},visitr[n+1]={0};
visitl[1]=1;
bfs(1,0,visitl,visitr,n,0,k);
if(flag)
cout<<"YES";
else
cout<<"NO";
}
Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook.
😇Happy Learning!!
