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