1. 程式人生 > >B類-Codeforces Round #535 (Div. 3)C. Nice Garland

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

include cout == ring and 幾分鐘 min space clas

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,笨死啦。

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