模拟,m=2的情况单独处理,因为m=2时,最后的结果只能是ABABABABA,或者BABABABBA,所以只要两者比较一下就行了。
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int main() { int n,m; char s[500100]; while(scanf("%d%d%s",&n,&m,s)!=-1) { int i,ans=0; m+=64; if(n==1) { cout<<ans<<endl<<s<<endl; continue; } if(m==66) { int l=0,r=0; for(i=0;i<n;i++) if(i%2==0) { if(s[i]==‘B‘) l++; else r++; } else { if(s[i]==‘A‘) l++; else r++; } if(l<r) { cout<<l<<endl; for(i=0;i<n;i++) if(i%2==0) cout<<‘A‘; else cout<<‘B‘; } else { cout<<r<<endl; for(i=0;i<n;i++) if(i%2==0) cout<<‘B‘; else cout<<‘A‘; } cout<<endl; continue; } s[n]=‘#‘; for(i=1;i<n;i++) if(s[i]==s[i-1]) { ans++; for(int j=65;j<=m;j++) if(j==s[i]||j==s[i+1]) continue; else { s[i]=j; break; } } s[n]=‘\0‘; cout<<ans<<endl<<s<<endl; } return 0; }
codeforces 219C Color Stripe,布布扣,bubuko.com
原文:http://blog.csdn.net/knight_kaka/article/details/21535145