比赛地址: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