因为有图片,不贴题面了,直接甩个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; }