题意:给定 2∗n 的由 W 和 B 组成的字符,请问能否不重复的一次走完所有 B 的格子。
思路:定义st表示状态。先从左往右找到一列是W+B的。若没找到这一列,则说明矩阵内全是B,输出YES。找到这一列后,若B在该列第一行,则用st=0表示起始位在第1行,否则用st=1表示起始位在第2行。接下来我们往后走,如果该列有两个B,说明我们需要改变状态,在下面的要走到上面,在上面的要走到下面,用st=!st来表示状态的变化。变化完后我们判断它的右边能不能走,也就是判断i+1是否等于W,如右边不能走说明不合法输出NO,否则就一直走,走到倒数第二列就结束。
void solve() {
int k = 0;
cin >> n;
FOR(0, 1) cin >> a[i];
while (a[0][k] == 'B' && a[1][k] == 'B') k++;
if (k >= n - 1) {
yes;
return;
}
st = a[0][k] == 'B' ? 0 : 1;
FOR(k, n - 2) {
if (a[!st][i] == 'B') st = !st;
if (a[st][i + 1] == 'W') {
no;
return;
}
}
yes;
}