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 }