题解:CF2029B Replacement
问题分析
给定一个二进制字符串
目标: 判断能否按照规则成功完成所有的操作。如果无法进行操作,即
解题思路
对于每一步,我们需要尽可能选择一个相邻的不同字符对,并且确保替换后的结果能继续进行下去。
对于每一对相邻的不同字符,查看是否可以将其替换为
Code
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t;
cin>>t;
while (t--)
{
int n;
cin>>n;
string s,r;
cin>>s;
cin>>r;
bool f=1;//表示是否可以完成操作
// 进行 n-1 次操作
for (int i=0;i<n-1;i++)
{
bool ff=0;//是否找到可替换的字符对
for (int j=0;j<s.size()-1;j++)
{
if (s[j]!=s[j+1])
{
//找到相邻不同的字符
s[j]=r[i];//将s[j]换为 r[i]
s.erase(j+1,1); //删除s[j+1]长度减1
ff=1;
break;//一旦找到替换对,退出当前循环
}
}
if (!ff)
{
f=0;
break;
}
}
if (f)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}