Bestcoder round 11 div2那有题解,就不再赘述了。
再写写做完这道题的一些收获:以前做题看到题目后就喜欢看这道题符合哪些模板,然后就去照着模板写。这种方式太不靠谱,往往模板提供的只是一种通用解法,而实际题目却要做一些优化。我想以后应该根据的题目的数据量分析应该用多大的复杂度,再逆向去找方法。这样做题的话应该会好很多。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define maxn 100005
char ch[maxn];
int a[27];
int main(){
int t;
scanf("%d\n",&t);
while(t--){
memset(ch,0,sizeof(ch));
memset(a,0,sizeof(a));
int k;
scanf("%s",ch);
scanf("%d",&k);
int st=0;
int ans=0;
for(int i=0;ch[i];i++){
a[ch[i]-'a']++;
if(a[ch[i]-'a']>k){
while(ch[st]!=ch[i]){
a[ch[st]-'a']--;
st++;
}
a[ch[st]-'a']--;
st++;
}
ans+=i-st+1;
}
cout<<ans<<endl;
}
return 0;
}