博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BestCoder11(Div2) 1003 Boring count (hdu 5056) 解题报告
阅读量:5311 次
发布时间:2019-06-14

本文共 1692 字,大约阅读时间需要 5 分钟。

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5056

题目意思:给出一条只有小写字母组成的序列S,问当中可以组成多少条每个字母出现的次数 <= k 的子序列。

      常规方法就是两重 for 循环暴力,很不幸的是,容易想到的方法往往会导致——TLE,恭喜~~

      所以必须要想出一条特别的方法来处理,将两重循环降到一重!(这个方法我是看题解啦)

      有两个指针:startpos 和 i 。含义表示从数组下标 startpos 到 i 中可以组成的最长符合条件的序列的开始点和结束点。其次,要有一个cnt数组,用来统计 startpos 到 i 中 每个出现的次数,如果当前处理的数组下标 i 所表示的字母 > k,startpos 要往后移动,并且cnt[s[startpos]-'a']--。其实出现这种情况无非就是 s[startpos] == s[i] 了,直到cnt[s[i]-'a'] <= k 跳出循环,此时最长序列数为 i - startpos + 1,不断累加就是答案。时间复杂度为O(n),因为整个序列的处理一直是向后处理的,没有回溯。

      (代码中的 j 就是 上面说的 i)

      

1 #include 
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 8 typedef __int64 LL; 9 const int N = 1e5 + 2;10 const int maxn = 26 + 2;11 12 char s[N];13 int cnt[maxn];14 15 int main()16 {17 int T, k;18 #ifndef ONLINE_JUDGE19 freopen("in.txt", "r", stdin);20 #endif // ONLINE_JUDGE21 22 while (scanf("%d", &T) != EOF)23 {24 while (T--)25 {26 scanf("%s", s);27 scanf("%d", &k);28 memset(cnt, 0, sizeof(cnt));29 int len = strlen(s);30 int j = 0, startpos = 0;31 LL ans = 0;32 33 for (int j = 0; j < len; j++)34 {35 cnt[s[j]-'a']++;36 while (cnt[s[j]-'a'] > k)37 {38 cnt[s[startpos]-'a']--;39 startpos++;40 }41 ans += j - startpos + 1;42 }43 printf("%I64d\n", ans);44 }45 }46 return 0;47 }

 

转载于:https://www.cnblogs.com/windysai/p/4003190.html

你可能感兴趣的文章
Leetcode 589. N-ary Tree Preorder Traversal
查看>>
机器学习/深度学习/其他开发环境搭建记录
查看>>
xml.exist() 实例演示
查看>>
判断是否为空然后赋值
查看>>
zabbix监控日志文件
查看>>
正则表达式
查看>>
pip install torch on windows, and the 'from torch._C import * ImportError: DLL load failed:' s...
查看>>
java基础(一):我对java的三个环境变量的简单理解和配置
查看>>
arcgis api 4.x for js 结合 Echarts4 实现散点图效果(附源码下载)
查看>>
YTU 2625: B 构造函数和析构函数
查看>>
apache自带压力测试工具ab的使用及解析
查看>>
C#使用Xamarin开发可移植移动应用(2.Xamarin.Forms布局,本篇很长,注意)附源码
查看>>
jenkins搭建
查看>>
C#中使用Split分隔字符串的技巧
查看>>
eclipse的调试方法的简单介绍
查看>>
加固linux
查看>>
IPSP问题
查看>>
10.17动手动脑
查看>>
WPF中Image显示本地图片
查看>>
Windows Phone 7你不知道的8件事
查看>>