Pipes

题目链接:[](​​Problem - 1234C - Codeforces​​)

思路

题中所谓的123456种管子,其实就是两种,直的和拐的。用1表示直,2表示拐。

j从1扫到n,记录pos,pos是所在位置的纵坐标。

每次看的是a[1][j]和a[2][j]。

1.如果j列是两个拐,那么pos会走到另外一行;

2.如果pos是拐,另一方是直,那么是不能继续流下去的;

3.如果pos是直,另一方是拐,就直接从直向右边流出就好;

4.如果pos是直,另一行也是直,那么也直接向右边流出。

最后只要判断,j从1遍历到n后,pos是不是2就可以了。(当然如果中途出现了2情况就直接不可能到)

#include<bits/stdc++.h>
using namespace std;
const int N = 2*1e5+10;
int T,n;
string s[3];
int a[3][N];
int main(){
scanf("%d",&T);
while(T--){
scanf("%d",&n);
memset(a,0,sizeof a);
s[1].clear();
s[2].clear();
cin>>s[1]>>s[2];

for(int i=1;i<=2;i++)
for(int j=1;j<=n;j++)//水管类型判别
a[i][j]=(s[i][j-1] <= '2' && s[i][j-1] >= '1')?1:2;

int pos=1;
for(int j=1;j<=n;j++){
if(a[pos][j] == 2 && a[(pos==1)?2:1][j] == 1){
pos=1;
break;
}
if(a[2][j] == 2 && a[1][j] == 2)
pos=(pos == 1)?2:1;
}
if(pos == 2)printf("YES\n");
else printf("NO\n");
}
}


一些废话
这题卡了一下午....队友一个个说这水题,心态炸了淦
淦啊淦啊!!!!!!
不说了,打题去了