码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-02-13 12:50:17      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:bsp   char   str   stdout   output   mes   bug   iostream   main   

 

 

#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

标签:bsp   char   str   stdout   output   mes   bug   iostream   main   

原文地址:https://www.cnblogs.com/albert67/p/10369091.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!