➤ Problem Link : 585B. Phillip and Trains
✅ C++ Solution :
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
char arr[3][1005];
int dp[3][1005];
bool isSafe(int i, int j, int n)
{
if(j+2*j-2<n && arr[i][j+2*j-2]!='.')
return 0;
if(3*j<n && arr[i][3*j]!='.')
return 0;
return 1;
}
bool halfSafe(int i, int j, int n)
{
if(j+2*j-2<n && arr[i][j+2*j-2]!='.')
return 0;
return 1;
}
bool func(int i, int j, int n)
{
if(dp[i][j]!=-1)
return dp[i][j];
if(j==n-1)
return dp[i][j]=1;
if(!halfSafe(i,j+1,n))
return dp[i][j]=0;
if(isSafe(i,j+1,n) && func(i,j+1,n))
return dp[i][j]=1;
if(i+1<3 && isSafe(i+1,j+1,n) && func(i+1,j+1,n))
return dp[i][j]=1;
if(i-1>=0 && isSafe(i-1,j+1,n) && func(i-1,j+1,n))
return dp[i][j]=1;
return dp[i][j]=0;
}
int main()
{
int t;
cin>>t;
while(t--)
{
int n,k;
cin>>n>>k;
for(int i=0;i<3;i++)
for(int j=0;j<n;j++)
{
cin>>arr[i][j];
dp[i][j]=-1;
}
bool f;
if(arr[0][0]=='s')
f=func(0,0,n);
else if(arr[1][0]=='s')
f=func(1,0,n);
else
f=func(2,0,n);
if(f)
cout<<"YES\n";
else
cout<<"NO\n";
}
}
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!!
