码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 5056 Boring count

时间:2015-02-07 10:13:04      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

http://acm.hdu.edu.cn/showproblem.php?pid=5056

题意:给你一个字符串,然后找出子串中每一个字母出现次数小于等于k的个数。

思路:枚举字符串下标i,每次计算以i为结尾的符合条件的最长串。那么以i为结尾的符合条件子串个数就是最长串的长度。求和即可。

技术分享
 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #define maxn 100010
 5 #define ll long long
 6 using namespace std;
 7 
 8 int n,m,t,k;
 9 char str[maxn];
10 int num[maxn];
11 
12 int main()
13 {
14     scanf("%d",&t);
15     while(t--)
16     {
17         memset(num,0,sizeof(num));
18         scanf("%s",str);
19         scanf("%d",&k);
20         int k1=strlen(str);
21         int pos=0;
22         ll ans=0;
23         for(int i=0; i<k1; i++)
24         {
25             num[str[i]-a]++;
26             if(num[str[i]-a]>k)
27             {
28                 while(str[pos]!=str[i])
29                 {
30                     num[str[pos]-a]--;
31                     pos++;
32                 }
33                 num[str[pos]-a]--;
34                 pos++;
35             }
36             ans+=(i-pos+1);
37         }
38         printf("%I64d\n",ans);
39     }
40     return 0;
41 }
View Code

 

hdu 5056 Boring count

标签:

原文地址:http://www.cnblogs.com/fanminghui/p/4278368.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!