C. Pipes

题目链接: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 }
原文地址:https://www.cnblogs.com/-Ackerman/p/11650325.html