原题链接
题解
分析
- 这道题目使目标字符串变为同一颜色,也就使只有两种情况
W/B
- 因为操作时,操作i会将i+1也操作,所以总操作次数为n-1次
- 如果不能变为全黑或全白 也就是check()函数,则输出-1
- 当全部操作完后,如果最后一项颜色与第一项颜色不相同,那么就是无法全变色
- swap函数用来更换值,其实也可以将swap(str[i+1])的功能也写入到swap函数里
代码
#include "string.h"
#include "iostream"
#include "vector"
using namespace std;
int n;
void swap(char &c){
if(c=='B')c='W';
else c='B';
}
bool check(string str,char c){
vector<int>tmp;
for(int i=0;i<n-1;i++){
if(str[i]!=c){
swap(str[i]);
swap(str[i+1]);
tmp.push_back(i);
}
}
if(str.front()!=str.back())return false;
else {
cout<<tmp.size()<<endl;
for(auto i:tmp)cout<<i+1<<' ';
if(tmp.size())cout<<endl;
return true;
}
}
int main(){
int T;
cin>>T;
string str;
while (T--){
cin>>n>>str;
if(!check(str,'B')&&!check(str,'W'))cout<<"-1"<<endl;
}
return 0;
}
标签:string,swap,str,砖块,操作,include,check,acwing
From: https://www.cnblogs.com/ChengMao/p/17138394.html