• Codeforces Round #535 (Div. 3) 1108C


    #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;
    }
  • 相关阅读:
    读《梦断代码》有感
    The Third Group Meeting!
    第一次课程作业项目报告
    第四次读后感
    个人作业进度(五)
    个人作业进度(四)
    个人作业进度(三)
    个人进度(二)
    个人作业进度(一)
    java中类的封装与继承
  • 原文地址:https://www.cnblogs.com/albert67/p/10369091.html
Copyright © 2020-2023  润新知