先从(1,1)开始找,对应数组就是a[0][0]
- 若a[0][0] > 2:也就是此时只能向上或者向下流。就看a[1][0]能不能往右流。
- 若a[0][0] <= 2:他能往右流。这一列就过去了,就看下一列了,也就是a[0][1]。
总结就是,当前若不能往下右流,就往上或下流后看另一行能不能往右,若还是不能往右,则不能流通。
若最后留到了最后一列,但是只能流到上面一行,也就是r = 0.那也会失败,因为要求是到达(2,n+1)。
完整代码:
#include<bits/stdc++.h>
#define int long long
#define rep(i, a, b) for(int i = a; i <= b; i ++)
#define per(i, a, b) for(int i = a; i >= b; i --)
using namespace std;
const int mod = 1000000009;
const int N = 2e5 +10;
char a[2][N];
void solve(){
int n; cin >> n;
cin >> a[0] >> a[1];
int r = 0,c = 0,F = 0;
bool flag = false;
while(c < n){
if(!F){//右
if(a[r][c] <= '2') c++;
else{
F = 1;
r = !r;
}
}else{
if(a[r][c] <= '2'){
cout << "NO\n";
return;
}else{
F = 0;c++;
}
}
}
if(!r) cout << "NO\n";
else cout << "YES\n";
}
signed main(){
int t; cin >> t;
while(t--) solve();
return 0;
}