585B. Phillip and Trains - Codeforces Solution C++

  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!!