Codeforces Round #535 (Div. 3)C. Nice Garland
题意:
由‘R‘, ‘G‘ and ‘B‘ 三个字母组成的一个字符串,每两个相同的字母需要相差3,找出最小需要交换次数。
分析:
这个字符串的长度大于等于3的时候,一定是RBG这三个字符的某一个排列的循环。
RBG一共最多有6种排列方式{"RGB","RBG","BGR","BRG","GRB","GBR"};
所以直接暴力循环6次即可。
代码:
#include<iostream> using namespace std; string dir[6]={"RGB","RBG","BGR","BRG","GRB","GBR"}; int main(){ int n; cin>>n; string s; cin>>s; int minn=100000000; int flag=0; //cout<<dir[5][1]; for(int j=0;j<6;j++){ int count=0; for(int i=0;i<n;i+=3){ if(s[i]!=dir[j][0]) count++; if(i+1 >= n) break; else if(s[(i+1)]!=dir[j][1]) count++; if(i+2 >= n) break; else if(s[(i+2)]!=dir[j][2]) count++; } if(count<minn){ minn=count; flag=j; } } cout<<minn<<endl; int i; for(i=0;i + 3 <n;i+=3){ cout<<dir[flag]; } int j = 0; for(i;i < n;i++) cout << dir[flag][j++]; //if(n%3==) return 0; }//比赛结束了几分钟才改好,emmmmmmm,笨死啦。
原文地址:https://www.cnblogs.com/zhyyyy/p/10327787.html
时间: 2024-10-07 02:29:14