12月19号
Codeforces Round #712 (Div. 2)B题
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
using namespace std;
const int N = 3e5 + 10;
char s1[N], s2[N];
vector<pair<int, int>> v;
map<int, pair<int, int>> mp;
void solve()
{
v.clear();
mp.clear();
int n;
cin >> n;
cin >> s1 + 1 >> s2 + 1;
int sum0 = 0, sum1 = 0;
for (int i = 1; i <= n; i++)
{
if (s1[i] == '0')
sum0++;
else if (s1[i] == '1')
sum1++;
mp[i] = {sum0, sum1};
}
for (int i = 1; i <= n; i++)
{
int j = i;
if (s1[i] != s2[i])
{
while (s1[j] != s2[j])
{
j++;
}
v.push_back({i, j - 1});
i = j - 1;
}
}
int flag = 1;
for (int i = v.size() - 1; i >= 0; i--)
{
int x = v[i].first - 1;
int y = v[i].second;
if (mp[x].first != mp[x].second || mp[y].first != mp[y].second)
{
flag = 0;
break;
}
}
if (flag)
cout << "YES" << endl;
else
cout << "NO" << endl;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int T;
cin >> T;
while (T--)
{
solve();
}
return 0;
}