题目链接:https://codeforces.com/contest/1234/problem/C
题意:
可以参见luogu
https://www.luogu.org/problem/CF1234C
思路:
因为它的管子是可以旋转的,所以 其实 1、2号管子其实都是一样的,不妨让它们都是 1
同理 3、4、5、6管子也是一样的,不妨让它们是2
然后我们再来考虑一下所有可能出现的情况
1、如果前面是 管子1 那么就直接往前走
2、如果前面是 管子2 并且它的下方(上方)也是 管子2 ,那么就会走到 下层 (上层)
3、如果前面是 管子2 并且它的下方(上方)是管子1 ,那么就没有办法走了
1 #include <math.h>
2 #include <stdio.h>
3 #include <iostream>
4 #include <algorithm>
5 #include <string>
6 #include <string.h>
7 #include <vector>
8 #include <map>
9 #include <stack>
10 #include <set>
11 #include <random>
12
13
14 #define LL long long
15
16 const int maxn = 2e5 + 10;
17
18 std::string s,ss;
19 int mp[maxn][2];
20
21 int main() {
22 int n,q;
23 std::cin >> q;
24 while (q--) {
25 memset(mp,0, sizeof(mp));
26 int floor = 1,lst = 0;
27 std::cin >> n >> s >> ss;
28 for (int i=1;i<=n;i++) {
29 if (s[i-1] == '1' || s[i-1] == '2') {
30 mp[i][0] = 1;
31 }
32 else
33 mp[i][0] = 2;
34 }
35 for (int i=1;i<=n;i++) {
36 if (ss[i-1] == '1' || ss[i-1] == '2') {
37 mp[i][1] = 1;
38 }
39 else
40 mp[i][1] = 2;
41 }
42 for (int i=1;i<=n;i++) {
43 if (mp[i][lst] == 1) {
44 continue;
45 }
46 if (mp[i][(lst+1)%2] == 1) {
47 floor = 0;
48 break;
49 }
50 else {
51 lst = (lst+1)%2;
52 }
53 }
54 if (lst == 1 && floor == 1) {
55 std::cout << "YES" << std::endl;
56 }
57 else
58 std::cout << "NO" << std::endl;
59 }
60 return 0;
61 }
知识兔