【HDU - 5672】String(尺取法)

题干:

There is a string SS.SS only contain lower case English character.(10≤length(S)≤1,000,000)(10≤length(S)≤1,000,000) 
How many substrings there are that contain at least k(1≤k≤26)k(1≤k≤26) distinct characters?

Input

There are multiple test cases. The first line of input contains an integer T(1≤T≤10)T(1≤T≤10) indicating the number of test cases. For each test case: 

The first line contains string SS. 
The second line contains a integer k(1≤k≤26)k(1≤k≤26).

Output

For each test case, output the number of substrings that contain at least kk dictinct characters.

Sample Input

2
abcabcabca
4
abcabcabcabc
3

Sample Output

0
55

题目大意:

   问有多少个  含有不少于k种字符的 子字符串。

解题报告:

   尺取法,但是我是以右端点为一个记录,即 表示以第s[r]个字符为结尾,有多少个字符串满足。这种方法需要处理cnt>k的情况。

还有一种方法,每次统计以s[l]为起始的,有多少个子字符串满足,这种不需要考虑cnt>k的情况。

AC代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int MAX = 1e6 +5;
char s[MAX];
int l,r,cnt,k,num[30];
ll ans;
int main()
{int t;cin>>t;while(t--) {scanf("%s",s+1);scanf("%d",&k);memset(num,0,sizeof num);int len = strlen(s+1);l = 1,r = 1;cnt = 0;ans = 0;while(l<=len && r <=len) {if(num[s[r] - 'a'] == 0) {cnt++;}num[s[r] - 'a']++;while(cnt > k) {while(num[s[l]-'a'] >=1) {num[s[l]-'a']--;if(num[s[l]-'a']==0) cnt--;l++;if(cnt == k) break;}}if(cnt == k) {while(num[s[l]-'a'] > 1) num[s[l]-'a']--,l++;ans += l;}r++;}printf("%lld\n",ans);}return 0 ;}
/*
1
aabcc
3
*/

错误代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int MAX = 1e6 +5; 
char s[MAX];
int l,r,cnt,k,num[30];
ll ans;
int main()
{int t;cin>>t;while(t--) {scanf("%s",s+1);scanf("%d",&k);memset(num,0,sizeof num);int len = strlen(s+1);l = 1,r = 1;cnt = 0;ans = 0;while(l<=len && r <=len) {if(num[s[r] - 'a'] == 0) {cnt++;}num[s[r] - 'a']++;if(cnt == k) {while(num[s[l]-'a'] > 1) num[s[l]-'a']--,l++;ans += l;}r++;}printf("%lld\n",ans);}return 0 ;} 

测试样例:

1

abc

2

应该输出3,但是输出了1。

 

AC代码2:(左端点的)

#include<cstdio>
#include<cstring>
using namespace std;
char s[1000200];
int vis[30];
int main()
{int t,k;scanf("%d", &t);while (t--){scanf("%s%d", s,&k);int len = strlen(s), sum = 0, r = -1;long long ans = 0;memset(vis, 0, sizeof(vis));for (int i = 0; i < len; i++){while (sum < k&&r+2<=len){r++;vis[s[r] - 'a']++;if (vis[s[r] - 'a'] == 1)sum++;}if (sum==k)ans += len - r;vis[s[i] - 'a']--;if (vis[s[i] - 'a'] == 0)sum--;}printf("%I64d\n", ans);}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/441545.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【HDU - 2030 】汉字统计 (C语言汉字编码,长知识)

题干&#xff1a; 统计给定文本文件中汉字的个数。 Input 输入文件首先包含一个整数n&#xff0c;表示测试实例的个数&#xff0c;然后是n段文本。 Output 对于每一段文本&#xff0c;输出其中的汉字的个数&#xff0c;每个测试实例的输出占一行。 [Hint:]从汉字机内码的…

【HDU - 1257】最少拦截系统 (标解dp,贪心可过,最长上升子序列类问题)

题干&#xff1a; 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能…

ae toolbarcontrol运行时没有_想办法让AE跑起来

好像大家都已经习惯了ADOBE系列软件的高能量吸收&#xff0c;谁让人家功能强大呢&#xff0c;尤其是AE&#xff0c;发展势头越来越猛&#xff0c;目前可以直接生成JSON文件&#xff0c;解析为代码文件后跨平台使用于安卓和苹果设备上&#xff0c;算是直接搭上了火热的移动互联快…

C++中两个常用的控制语句格式的函数(width和precision函数)

width 语法: int width();int width( int w );函数 width()返回当前的宽度。可选择参数w用于设定宽度大小。宽度是指每一次输出中显示的字符的最小数目。例如&#xff1a; cout.width( 5 );cout << "2";displays 2(在一个2的后面紧跟着四个空格) precision 语…

如何将风险应用加入白名单_理财要如何将资金分散呢?可以参考风险分散和分享经济红利的思路...

#理财大赛第三季#银行理财是值得投资者配置资金的&#xff0c;收益相对稳定&#xff0c;它的风险等级也很明显地标注在产品说明书和风险揭示书上&#xff0c;投资者可以根据自身投资偏好选择适合的理财。大部分买过银行理财的人都会选择将所有资金投入进去。银行理财确实是一个…

【洛谷 - 快来签到】(数学,公式,溢出爆longlong的处理)

题干&#xff1a; 题目描述 sum2581114…&#xff0c;输入正整数n&#xff0c;求sum的前n项和。 输入输出格式 输入格式&#xff1a; 输入一个正整数n 输出格式&#xff1a; 输出一个整数表示答案 输入输出样例 输入样例#1&#xff1a; 复制 2 输出样例#1&#xff1a; 复…

bind merge r 和join_[R] 制作梅西和C罗进球数的quot;追赶动画quot; - ggplot2 + gifski

效果如下&#xff1a;数据可视化 - 梅西 vs C罗https://www.zhihu.com/video/1084910827596804096数据可视化 - 8大射手进球趋势https://www.zhihu.com/video/1084910854461321216制作过程分为3个步骤:处理数据ggplot2创建图像帧save_gif逐帧打包生成gif文件使用的packages:lib…

【CodeForces-1041C】Coffee Break(贪心,STL,set二分维护,题意难,有坑,SJ题,构造)(知识点总结)

题干&#xff1a; Recently Monocarp got a job. His working day lasts exactly mm minutes. During work, Monocarp wants to drink coffee at certain moments: there are nn minutes a1,a2,…,ana1,a2,…,an, when he is able and willing to take a coffee break (for th…

盐务街属于一环吗_郑州步入“五环”时代,最早的“一环”原来是这里

近日&#xff0c;郑州“五环路”建设最新进展受到广泛关注。当郑州步入“五环”时代时&#xff0c;你是否想过郑州的最早的“一环”在哪里?来跟随记者的讲解&#xff0c;来一场时空逆行穿梭之旅&#xff0c;从历史深处寻找郑州最早的“一环”。△郑州五环示意图◆郑州现代“一…

C++ 输入输出加速挂(ACM竞赛常用)

好多种版本&#xff0c;今天给出其中之一&#xff0c;也是比较快的一种。 int read() {char ch getchar();int num 0;bool fl 0;for(; !isdigit(ch); ch getchar())if (ch-) fl 1;for(; isdigit(ch); ch getchar())num (num<<1)(num<<3)ch-48;if(fl) num …

oracle中那个日期怎么相减_oracle数据库中日期加减函数

1.oracle中当前系统时间加减用法select add_months(sysdate, 12) "NEW YEAR" from dual; /**系统时间12个月后的时间**/select extract(month from sysdate) "This Month" from dual; /**获取系统时间所在月份**/select (sysdate 1) "NEW DATE"…

【CodeForces - 1041D】Glider (枚举起点,双指针 或 二分终点,思维)(知识点总结)

题干&#xff1a; A plane is flying at a constant height of hh meters above the ground surface. Lets consider that it is flying from the point (−109,h)(−109,h) to the point (109,h)(109,h) parallel with OxOx axis. A glider is inside the plane, ready to s…

duilib vs2015 安装_FFmpeg视频播放器开发-FFmpeg简介与项目环境搭建(一)

前言&#xff1a;视频开发库有很多&#xff0c;例如微软的DirectShow&#xff1b;开源库OpenCV&#xff0c;当然OpenCV主要是图像处理&#xff0c;视频部分还是用的ffmpeg, 而且无法解码音频&#xff1b;SDL&#xff1b;大华和海康都有自己的库等等。音视频属于流媒体领域&…

【洛谷 - U43391】不是0-1背包的暴力AC(思维,二分,可转化为二元组问题,复习暴力dfs总结)

题干&#xff1a; https://www.luogu.org/problemnew/show/U43391 自01背包问世之后&#xff0c;小A对此深感兴趣。一天&#xff0c;小A去远游&#xff0c;却发现他的背包不同于01背包。 小A的背包最多能装W的价值 现有n件物品&#xff0c;分别为v1,v2,v3……vn 问如何存放物…

windowsthinpc虚拟内存_windows thin pc如何开启windows功能

没有“\DS\”目录 (子目录)没有“\Packages\”目录(子目录)没有“\FeaturePack\”目录(子目录)没有“\LangPacks\"目录(子目录)未找到“winemb-premiumcodecs-dolby-ac3-audioencoder.cab”未找到“WinEmb-PremiumCodecs-MPEG2andDolbyDecoder.cab”未找到“WinEmb-Premiu…

【牛客 - 185F】 假的数学游戏(斯特林公式,大数Java打表)

题干&#xff1a; 输入描述: 第一行&#xff1a;一个整数X 输出描述: 第一行&#xff1a;一个整数N 示例1 输入 复制 7 输出 复制 10 备注: 每个测试点所对应的X满足&#xff1a;第i个测试点输入的值为第i-1个测试点输入的值乘以10再加上7。特别的&#xff0c;第一个…

js怎么调用wasm_对于WebAssembly编译出来的.wasm文件js如何调用

WebAssembly也叫浏览器字节码技术 这里就不过多的解释了网上很多介绍主要是让大家知道在js里面如何调用执行它&#xff0c;我之前看WebAssemblyAPI时候反正是看得一脸懵逼也是为了大家能更快的入手这个比较新的技术吧这边写的一个dom是官方推荐的c/c编译的c代码1 int add (int …

*【HDU - 6333】Problem B. Harvest of Apples (莫队,逆元,组合数学)(这样预处理正确吗?)

题干&#xff1a; There are nn apples on a tree, numbered from 11 to nn. Count the number of ways to pick at most mm apples. Input The first line of the input contains an integer TT (1≤T≤105)(1≤T≤105) denoting the number of test cases. Each test c…

ruoyi 多模块部署_大数据时代,独立部署的商城系统具有哪些优势?

独立部署是把一个可部署软件包安装到一个指定IT环境上并让其按预定流程提供服务的过程。现如今&#xff0c;越来越多的商家开始搭建网上商城系统&#xff0c;从而为自己积攒多年的客户群体提供更为便捷的购物模式&#xff0c;让购物变得更加智能化。独立部署的商城系统具有哪些…

【SPOJ - DQUERY】D-query(权值树状数组 或 主席树 或 莫队)

题干&#xff1a; Given a sequence of n numbers a1, a2, ..., an and a number of d-queries. A d-query is a pair (i, j) (1 ≤ i ≤ j ≤ n). For each d-query (i, j), you have to return the number of distinct elements in the subsequence ai, ai1, ..., aj. Inpu…