AtCoder Grand Contest 011D(思維,規律,異或)
#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,因為這一位終將變成相當於這一步的開頭第一位
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++)//最後面是找出的規律
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)
else
printf("B");
}
else
for(l=1;l<=n;l++)
if((l+1)&1)
printf("A");
else
printf("B");
}
return 0;
}
AtCoder Grand Contest 011D(思維,規律,異或)