CF1108C 题解
CF1108C 题解
题意
给定一个长度为 \(N\) 的字符串,由 \(R, G, B\) 组成。
请你求出最少需要修改多少次,才能使字符串中相同的字符 \(\mod 3\) 的值相等。
思路
因为相同的字符 \(mod\) \(3\) 的距离要相等,所以字符串是循环的。
而正好字符串由 \(3\) 种字符组成,只需要提前处理好循环节,再枚举每种循环节的修改次数,最后求出最大值即可。
上代码
#include <bits/stdc++.h>
using namespace std;
const string t[] = {"RGB", "RBG", "GRB", "GBR", "BRG", "BGR"}; // 枚举循环节
string a, s;
int n, minc = INT_MAX;
void C(string t){
int c = 0;
for (int i = 0; i < n; i++) {
if (s[i] != t[i % 3]) {
c++; // 求更改次数
}
}
if (c < minc) { // 更新最小值
a = t;
minc = c;
}
}
int main(){
cin >> n >> s;
for (int i = 0; i < 6; i++) { // 枚举情况
C(t[i]);
}
cout << minc << endl;
for (int i = 0; i < n; i++) {
cout << a[i % 3];
}
return 0;
}