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;
}

猜你喜欢

转载自www.cnblogs.com/albert67/p/10369091.html
今日推荐