比赛地址:https://ac.nowcoder.com/acm/contest/11190#question

A:
因为题目只含有'R'、'B'、'G'三种字符,所以连续的三个字符中,无论两端是什么字符,总可以改变中间的字符使得这三个字符互不相同,我们从字符串中的第2个字符开始枚举,每次判断并修改即可,那为什么不是从第1个字符开始呢?因为如果从第一个字符开始的话,如果n为奇数,那么就需要修改(n+1)/2 次,比 n/2 下取整大,就会不符合题目条件。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    string s;
    cin>>s;
    for(int i=1;i<n;i+=2)
    {
        char p='R';
        if((p!=s[i-1]&&i+1<n&&p!=s[i+1])||(p!=s[i-1]&&i+1>=n))    s[i]=p;
        p='B';
        if((p!=s[i-1]&&i+1<n&&p!=s[i+1])||(p!=s[i-1]&&i+1>=n))    s[i]=p;
        p='G';
        if((p!=s[i-1]&&i+1<n&&p!=s[i+1])||(p!=s[i-1]&&i+1>=n))    s[i]=p;
    }
    cout<<s<<endl;
    return 0;
}

官方题解:https://ac.nowcoder.com/discuss/659247?type=101&order=0&pos=7&page=1&channel=-1&source_id=1