输入的时候直接构造序列,O(n)。
#include<bits/stdc++.h>
#define ll long long
const int maxn=100000+100000;
char team[maxn];
using namespace std;
int main(){
int T,ans,n,k,i,j,t;
char c;
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&k);
getchar();ans=0,t=0;
for(i=0;ans<=n;){
scanf("%c",&c);ans++;
if(!i) {i++;continue;}
else{
if(c=='a'){
team[i++]=c;t++;
}else if(c=='b'){
if(team[i-1]=='a') {
team[i++]='0'; t=0;
}
team[i++]='b';t++;
}else{
int f=0;
if(t>=k) f=1;
if(f) {
team[i++]='0';t=0;
}
team[i++]='c';t++;
}
}
}
printf("%d\n",i-1);
}
return 0;
}