Loading

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;
}
posted @ 2023-03-02 22:40  chengning0909  阅读(18)  评论(0编辑  收藏  举报