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