C. Nice Garland
題目鏈接
題目大意:給出一個含有n個字符的字符串s,且都由R G B組成,題目要求你修改這個字符串,就是變換某位置上字符,要你求出最小修改次數,使滿足s[i]=s[i+3]。
思路:如果只有一個字符,那不用修改。如果只有兩個字符且相等,就修改一個。
如果大於等於3個字符,就枚舉六種情況RGB RBG BRG BGR GBR GRB六種爲頭的字符串,找出跟s對應位置上字符不同的個數,個數最小的那個就是結果。
代碼
#include <cstdio>
#include <cstring>
char s[200005],b[200005],res[200005];
char a[7][4]={"RBG","RGB","BGR","BRG","GBR","GRB"};
int compare(char a[],char b[],int len){
int cnt=0;
for(int i=0;i<len;i++){
if(a[i]!=b[i]) cnt++;
}
return cnt;
}
int main(){
int n,min=999999999;
scanf("%d%s",&n,s);
int len=strlen(s);
if(len>=3)
for(int i=0;i<6;i++){
b[0]=a[i][0],b[1]=a[i][1],b[2]=a[i][2];
for(int j=3;j<len;j++){
b[j]=b[j-3];
}
int re=compare(b,s,len);
if(re<min){
min=re;
res[0]=0;
strcat(res,b);
}
}
else{
if(len==1) res[0]=s[0],min=0;
else{
if(s[0]==s[1]){
if(s[0]=='R') s[1]='G';
else if(s[0]=='G') s[1]='R';
else if(s[0]=='B') s[1]='R';
}
strcat(res,s);
min=1;
}
}
printf("%d\n%s",min,res);
}