- #include<bits/stdc++.h>
- using namespace std;
- char s[200007];
- int ans[200007];
- int main(){
- int n,k;
- int i=0,j=0,l=0;
- scanf("%d%d",&n,&k);
- scanf("%s",s+1);
- for(i=1;i<=n;i++)
- if(s[i]=='A')
- ans[i]=1;
- int tmp=0;
- for(i=1,j=1;i<=k&&j<=n;i++){
- if(ans[j]^tmp){
- // 如果这一位经历异或之后变为了 1 需要再变一次把它变成 0, 因为这一位终将变成相当于这一步的开头第一位
- ans[j]^=1;// 将它变成 0
- continue;
- }
- tmp^=1;// 变化异或标记
- j++;// 进入下一位
- }
- if(i>=k+1){
- //k 太小以至于前面还有剩余没有变为最终形态
- for(l=j;l<=n;l++)
- if(ans[l]^tmp)// 后面的位数根据奇偶性进行变化
- printf("A");
- else
- printf("B");
- for(l=n+1;l<=n+j-1;l++)// 最后面是找出的规律
- if((n+j-l)&1)
- printf("A");
- else
- printf("B");
- }
- else{
- if(n&1){
- // 奇数则判断开头剩余是规律
- if((k-i+2)&1)
- printf("A");
- else
- printf("B");
- for(l=2;l<=n;l++)
- if(l&1)
- printf("A");
- else
- printf("B");
- }
- else
- for(l=1;l<=n;l++)
- if((l+1)&1)
- printf("A");
- else
- printf("B");
- }
- return 0;
- }
来源: http://www.bubuko.com/infodetail-2973048.html