题意:每次翻转相邻的方格,问你翻转多少次使得颜色相同,求最少操作数
虽然代码乱点,但思想还是蛮简单的,就是一个暴力反转问题
int main()
{
IOS;
while(cin>>n){
vector<int> w,b; //存储全为 白/黑 的答案
string s;
cin>>s;
string tmp=s;
bool fb=0,fw=0; //判断全为 白/黑 可行
for(i=0;i<n-1;i++){ //全为黑色
if(tmp[i]=='B') continue;
tmp[i+1]=(tmp[i+1]=='B')? 'W' : 'B' ;
b.push_back(i+1);
}
if(tmp[n-1]=='B') fb=1;
tmp=s;
for(i=0;i<n-1;i++){
if(tmp[i]=='W') continue;
tmp[i+1]=(tmp[i+1]=='B')? 'W' : 'B' ;
w.push_back(i+1);
}
if(tmp[n-1]=='W') fw=1;
if(fb==0 && fw==0){ cout<<-1<<endl; return 0; }
if(fb==0 && fw==1){
cout<<w.size()<<endl;
for( auto it:w ) cout<<it<<" ";
cout<<endl;
return 0;
}
else if(fb==1 && fw==0){
cout<<b.size()<<endl;
for( auto it:b ) cout<<it<<" ";
cout<<endl;
return 0;
}
//vector<int>::iterator it;
if( b.size()>w.size() ){
cout<<w.size()<<endl;
for( auto it:w ) cout<<it<<" ";
}
else{
cout<<b.size()<<endl;
for( auto it:b ) cout<<it<<" ";
}
cout<<endl;
}
//PAUSE;
return 0;
}