题意:
就是有一串灯分别颜色是R,G,B。要求将每种颜色的灯相隔2个不同的灯。比如,RGR变成RGB才叫好看。
分析:
RGB有6种排列,分别是:"RGB", "RBG", "GBR", "GRB", "BGR", "BRG"。但是注意的是,两种之间的排列,肯定是不满足这样的情况的。
所以,怎样才能满足题目的要求呢?这样只有同样的情况才可以。也就是说RGRBGRRRG每个只能按照一个排列来进行更改。因为,把这样的字符串这样分三个改好后
其实就已经是好看的。也就是6种情况都进行暴力,然后比较大小。
#include#include using namespace std;const int maxn = 2 * 1e5 + 10;string ss[6] = { "RGB", "RBG", "GBR", "GRB", "BGR", "BRG" };int vis[6];int main(){ char st[maxn]; int n; cin >> n; cin >> st; for (int j = 0; j < 6;++j) for (int i = 0; i < n; ++i){ if (st[i] != ss[j][i % 3]){ ++vis[j]; } } int minn = 0; for (int i = 0; i < 6; ++i){ if (vis[minn]>vis[i])minn = i; } cout << vis[minn] << endl; for (int i = 0; i < n; ++i){ cout << ss[minn][i % 3]; } cout << endl;}