HDU 5056 Boring Count --统计
题解见官方题解,我这里只实现一下,其实官方题解好像有一点问题诶,比如
while( str[startPos] != str[i+1] ) cnt[str[startPos]]--, startPos++;
那个str[i+1]的话会越界。应该是这样: while(str[startPos] != str[i])
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <algorithm> #define lll __int64 using namespace std; #define N 100007 char ss[N]; int cnt[29]; int main() { int len,k,i,t; scanf("%d",&t); while(t--) { memset(ss,0,sizeof(ss)); memset(cnt,0,sizeof(cnt)); ss[0] = '$'; scanf("%s",ss+1); len = strlen(ss+1); scanf("%d",&k); int s = 1; lll ans = 0; for(i=1;i<=len;i++) { cnt[ss[i]-'a']++; if(cnt[ss[i]-'a'] > k) { while(ss[s] != ss[i]) cnt[ss[s]-'a']--, s++; cnt[ss[s]-'a']--, s++; } ans += i-s+1; } printf("%I64d\n",ans); } return 0; }
官方题解:
作者:whatbeg
出处1:http://whatbeg.com/
出处2:http://www.cnblogs.com/whatbeg/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
更多精彩文章抢先看?详见我的独立博客: whatbeg.com