因为有图片,不贴题面了,直接甩个cf链接
https://codeforces.com/problemset/problem/1234/C
记(fx,fy)为上一步位于哪一次节点,(x,y)是现在在的节点。
判断所有情况的下一步是否可走以及往哪走就行了。又是改了一个小时真的是醉了
#include<bits/stdc++.h>
using namespace std;
int a[11][2000010];
int flag;
int q,n;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>q;
while(q--)
{
cin>>n;
char ch;
for(int i=1;i<=n;++i) {cin>>ch;a[1][i]=ch^48;}
//cin>>ch;
for(int i=1;i<=n;++i) {cin>>ch;a[2][i]=ch^48;}
//cin>>ch;
a[1][n+1]=a[2][n+1]=0;//初始化
a[1][0]=2;
//dfs(1,1,1,0);
int x=1,y=1,fx=1,fy=0;
flag=0;
while(y<=n)
{
//cout<<x<<' '<<y<<endl;
if(a[x][y]<3)
{
fx=x;fy=y;++y;
//dfs(x,y+1,x,y);
}
else
{
if(fy!=y)
{
if(fx==1) {fx=x;fy=y;x=2;if(a[x][y]==1 || a[x][y]==2) break;}//dfs(2,y,x,y);
else {fx=x;fy=y;x=1;if(a[x][y]==1 || a[x][y]==2) break;}//dfs(1,y,x,y);
}
else
{
if(a[x][y]>2) {fx=x;fy=y;++y;}//dfs(x,y+1,x,y);
else break;
}
}
}
if(y>n)
{
if(x==2) flag=1;
}
if(flag)cout<<"YES\n";
else cout<<"NO\n";
}
return 0;
}


京公网安备 11010502036488号