小码君的路
2025-07-01 11:29:25
发布于:上海
30阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
string s, t;
int q, m;
int dp[2][200005]; // 走到(i,j)会走多少个b
int main()
{
cin >> q;
while (q--)
{
cin >> m >> s >> t;
int cnt = 0;
for (int i = 0; i < m; i++)
cnt += s[i] == 'B';
for (int i = 0; i < m; i++)
cnt += t[i] == 'B';
for (int i = 0; i < m; i++) // 初始化
{
if (s[i] == 'B')
dp[0][i] = 1;
else
dp[0][i] = 0;
if (t[i] == 'B')
dp[1][i] = 1;
else
dp[1][i] = 0;
}
for (int i = 0; i < m; i++)
{
if (s[i] == 'B' && i >= 1) // 从左边转移过来
dp[0][i] += dp[0][i - 1];
if (t[i] == 'B' && i >= 1)
dp[1][i] += dp[1][i - 1];
if (s[i] == 'B' && t[i] == 'B')
{
int tmp = dp[0][i];
dp[0][i] = max(dp[0][i], dp[1][i] + 1);
dp[1][i] = max(dp[1][i], tmp + 1);
}
}
if (dp[0][m - 1] == cnt || dp[1][m - 1] == cnt)
cout << "YES\n";
else
cout << "NO\n";
}
return 0;
}
这里空空如也
有帮助,赞一个