B类-Codeforces Round #535 (Div. 3)C. Nice Garland

Posted zhyyyy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了B类-Codeforces Round #535 (Div. 3)C. Nice Garland相关的知识,希望对你有一定的参考价值。

Codeforces Round #535 (Div. 3)C. Nice Garland

题意:

R‘, ‘G‘ and ‘B‘ 三个字母组成的一个字符串,每两个相同的字母需要相差3,找出最小需要交换次数。

分析:

这个字符串的长度大于等于3的时候,一定是RBG这三个字符的某一个排列的循环。
RBG一共最多有6种排列方式{"RGB","RBG","BGR","BRG","GRB","GBR"};

所以直接暴力循环6次即可。

代码:

#include<iostream>
using namespace std;
string dir[6]={"RGB","RBG","BGR","BRG","GRB","GBR"};
int main(){
    int n;
    cin>>n;
    string s;
    cin>>s;
    int minn=100000000;
    int flag=0;
    //cout<<dir[5][1];
    for(int j=0;j<6;j++){
        int count=0;
        for(int i=0;i<n;i+=3){
            if(s[i]!=dir[j][0]) count++;
            if(i+1 >= n)
            break;
            else if(s[(i+1)]!=dir[j][1]) count++;
            if(i+2 >= n)
            break;
            else if(s[(i+2)]!=dir[j][2]) count++;
        }
        if(count<minn){
            minn=count;
            flag=j;
        }
    }
    cout<<minn<<endl;
    int i;
    for(i=0;i + 3 <n;i+=3){
        cout<<dir[flag];
    }
    int j = 0;
    for(i;i < n;i++)
    cout << dir[flag][j++];
    
    //if(n%3==)
    return 0;
}
//比赛结束了几分钟才改好,emmmmmmm,笨死啦。

 




以上是关于B类-Codeforces Round #535 (Div. 3)C. Nice Garland的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #535 (Div. 3)小上分记

Codeforces Round #535 (Div. 3) 题解

Codeforces Round #535 (Div. 3) F

Codeforces Round #535 (Div. 3)

Codeforces Round #535 (Div. 3) 1108C - Nice Garland

Codeforces Round #535 F-MST Unification