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

Posted albert67

tags:

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

 

 

#include <bits/stdc++.h>

using namespace std;

int main() {
#ifdef _DEBUG
    freopen("input.txt", "r", stdin);
//    freopen("output.txt", "w", stdout);
#endif
    
    int n;
    string s;
    cin >> n >> s;
    
    vector<int> p(3);
    iota(p.begin(), p.end(), 0);
    
    string colors = "RGB";
    string res = "";
    int ans = 1e9;
    
    do {
        string t;
        int cnt = 0;
        for (int i = 0; i < n; ++i) {
            t += colors[p[i % 3]];
            cnt += t[i] != s[i];
        }
        if (ans > cnt) {
            ans = cnt;
            res = t;
        }
    } while (next_permutation(p.begin(), p.end()));
    
    cout << ans << endl << res << endl;
    
    return 0;
}

 

以上是标准程序,以下是我的程序,相比之下我的程序太复杂了。因为没有用到next_permutation

 

#include<iostream>
#include<algorithm>
#include<limits.h>
using namespace std;
char c[200005];
int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>c[i];
    }
    int minCnt=INT_MAX;
    int cnt=0;
    int flag;
    //RGB
    for(int i=0;i<n/3;i++){
        if(c[i*3]!=R)
            cnt++;
        if(c[i*3+1]!=G)
            cnt++;
        if(c[i*3+2]!=B)
            cnt++;
    }
    if(n/3*3<n){
        int i=n/3*3;
        if(c[i]!=R)
            cnt++;
        if(i+1<n){
            if(c[i+1]!=G)
                cnt++;
        }
    }
    if(cnt<minCnt){
        minCnt=cnt;
        flag=1;
    }
        
        
    //RBG
    cnt=0;
        for(int i=0;i<n/3;i++){
        if(c[i*3]!=R)
            cnt++;
        if(c[i*3+1]!=B)
            cnt++;
        if(c[i*3+2]!=G)
            cnt++;
    }
    if(n/3*3<n){
        int i=n/3*3;
        if(c[i]!=R)
            cnt++;
        if(i+1<n){
            if(c[i+1]!=B)
                cnt++;
        }
    }
    if(cnt<minCnt){
        minCnt=cnt;
        flag=2;
    }
        
    //BRG
    cnt=0;
    for(int i=0;i<n/3;i++){
        if(c[i*3]!=B)
            cnt++;
        if(c[i*3+1]!=R)
            cnt++;
        if(c[i*3+2]!=G)
            cnt++;
    }
    if(n/3*3<n){
        int i=n/3*3;
        if(c[i]!=B)
            cnt++;
        if(i+1<n){
            if(c[i+1]!=R)
                cnt++;
        }
    }
    if(cnt<minCnt){
        minCnt=cnt;
        flag=3;
    }
        
    //BGR
    cnt=0;
    for(int i=0;i<n/3;i++){
        if(c[i*3]!=B)
            cnt++;
        if(c[i*3+1]!=G)
            cnt++;
        if(c[i*3+2]!=R)
            cnt++;
    }
    if(n/3*3<n){
        int i=n/3*3;
        if(c[i]!=B)
            cnt++;
        if(i+1<n){
            if(c[i+1]!=G)
                cnt++;
        }
    }
    if(cnt<minCnt){
        minCnt=cnt;
        flag=4;
    }
        
    //GBR
    cnt=0;
    for(int i=0;i<n/3;i++){
        if(c[i*3]!=G)
            cnt++;
        if(c[i*3+1]!=B)
            cnt++;
        if(c[i*3+2]!=R)
            cnt++;
    }
    if(n/3*3<n){
        int i=n/3*3;
        if(c[i]!=G)
            cnt++;
        if(i+1<n){
            if(c[i+1]!=B)
                cnt++;
        }
    }
    if(cnt<minCnt){
        minCnt=cnt;
        flag=5;
    }
        
    //GRB
    cnt=0;
    for(int i=0;i<n/3;i++){
        if(c[i*3]!=G)
            cnt++;
        if(c[i*3+1]!=R)
            cnt++;
        if(c[i*3+2]!=B)
            cnt++;
    }
    if(n/3*3<n){
        int i=n/3*3;
        if(c[i]!=G)
            cnt++;
        if(i+1<n){
            if(c[i+1]!=R)
                cnt++;
        }
    }
    if(cnt<minCnt){
        minCnt=cnt;
        flag=6;
    }
    
    
    
    cout<<minCnt<<endl;
    if(flag==1){
        for(int i=0;i<n/3;i++){
            cout<<"RGB";
        }
        if(n/3*3<n){
            cout<<"R";
            if(n/3*3+1<n)
                cout<<"G";
        }
    }
    else if(flag==2){
        for(int i=0;i<n/3;i++){
            cout<<"RBG";
        }
        if(n/3*3<n){
            cout<<"R";
            if(n/3*3+1<n)
                cout<<"B";
        }
    }
    else if(flag==3){
        for(int i=0;i<n/3;i++){
            cout<<"BRG";
        }
        if(n/3*3<n){
            cout<<"B";
            if(n/3*3+1<n)
                cout<<"R";
        }
    }
    else if(flag==4){
        for(int i=0;i<n/3;i++){
            cout<<"BGR";
        }
        if(n/3*3<n){
            cout<<"B";
            if(n/3*3+1<n)
                cout<<"G";
        }
    }
    else if(flag==5){
        for(int i=0;i<n/3;i++){
            cout<<"GBR";
        }
        if(n/3*3<n){
            cout<<"G";
            if(n/3*3+1<n)
                cout<<"B";
        }
    }    
    else if(flag==6){
        for(int i=0;i<n/3;i++){
            cout<<"GRB";
        }
        if(n/3*3<n){
            cout<<"G";
            if(n/3*3+1<n)
                cout<<"R";
        }
    }    
    
    return 0;
}

 

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

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

Codeforces Round #535 (Div. 3) F

Codeforces Round #535 (Div. 3)

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

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

Codeforces Round #535 F-MST Unification