题目链接:http://codeforces.com/contest/1108/problem/D
题意是给了一个长度为n的字符串,且字符串中只包含'G','B','R'这三种字符,可以改变字符,现在要求两个相同的字符不能相连,问最小的改动次数以及改动后的字符串。
枚举每一位字符,如果出现了str[i] == str[i-1]的情况就去判断一下str[i-1] 和 str[i+1]的关系去确定str[i]的字符就行了。
AC代码:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
string str;
int len;
cin>>len;
cin>>str;
int ans = 0;
for(int i=1;i<len;i++){
if(str[i] == str[i-1]){
char s = 'B';
ans ++;
if(str[i-1] == 'B' || (i + 1 < len && str[i+1] == 'B')){
s = 'G';
if(str[i-1] == 'G' || (i + 1 < len && str[i+1] == 'G'))s = 'R';
}
str[i] = s;
}
}
cout<<ans<<endl<<str<<endl;
return 0;
}