EOJ 3441-唐纳德与子串 (Easy)
来源:互联网 发布:c语言初学者看什么书 编辑:程序博客网 时间:2024/06/05 03:32
3441. 唐纳德与子串 (Easy)
Time limit per test: 1.0 seconds
Memory limit: 256 megabytes
题目链接:点击打开链接
子串的定义是在一个字符串中连续出现的一段字符。这里,我们使用
对于一个给定的字符串
Input
输入具有如下形式:
第一行一个字符串
第二行一个整数
接下来每行:首先两个整数
字符串中只会出现
数据规模约定:
- 对于 Easy 档:
1≤|s|≤100,q≤∑|zi|≤100 。 - 对于 Hard 档:
1≤|s|≤105,q≤∑|zi|≤105 。
Output
对于每次询问,输出一个整数,表示答案。
input
thisisagarbagecompetitionhahaha
5
0 30 a
1 5 is
25 30 hah
6 12 ag
7 12 ag
output
6
2
2
2
1
分析:
KMP的题,知识不是让你在文本串中匹配模式串,而是让你截取文本串中的某一部分对其进行匹配模式串的个数。练KMP的之后我就在c++的next数组里挣扎了好久,没想到这次又掉进去了,我滴天,套模板的题,早知道我就将next数组改个名字了。
#include<stdio.h>#include<string.h>#include<string>char s[1005],h[1005];int next[1005];int q,l,r,n;void get_next()///求得模式串的next数组{ next[0] = -1; int k = -1; for (int i = 1; i < n; i++) { while (k > -1 && h[k + 1] != h[i]) { k = next[k]; } if (h[k + 1] == h[i]) { k = k + 1; } next[i] = k; }}int KMP()///进行匹配{ get_next(); int k = -1; int sum=0; for (int i = l; i <= r; i++ ) { while (k >-1&& h[k + 1] != s[i]) { k = next[k]; } if (h[k + 1] == s[i]) k = k + 1; if (k == n-1) { sum++; } } return sum;}int main(){ int ans; scanf("%s",s); scanf("%d",&q); while(q--) { scanf("%d %d %s",&l,&r,h); n=strlen(h); ans=KMP(); printf("%d\n",ans); } return 0;}
阅读全文
0 0
- EOJ 3441-唐纳德与子串 (Easy)
- EOJ 3441 唐纳德与子串 (Easy)
- EOJ #3441 唐纳德与子串 (Easy)【KMP】
- EOJ Monthly 2017.12 G1. 唐纳德与子串 (Easy)
- EOJ Monthly 2017.12 (暨 ECNU 12 月内部选拔)G1. 唐纳德与子串 (Easy)
- (substr strstr 的学习) EOJ Monthly 2017.12 (暨 ECNU 12 月内部选拔) G1. 唐纳德与子串 (Easy)
- 唐纳德与子串 (Easy)(计算子串个数)
- G2. 唐纳德与子串 (Hard)kmp
- EOJ 3452- 唐纳德先生和假骰子
- EOJ 3452 唐纳德先生和假骰子
- EOJ Monthly 2017.12 A. 唐纳德先生和假骰子
- EOJ #3452 唐纳德先生和假骰子【暴力】
- EOJ Monthly 2017.12 题解 3449. 唐纳德和他的数学老师
- EOJ月赛:唐纳德和他的数学老师(二分图匹配 & 最大流)
- EOJ Monthly 2017.12 (暨 ECNU 12 月内部选拔) A. 唐纳德先生和假骰子
- EOJ
- EOJ
- EOJ
- (译)SimpleGLXWindow类
- screen使用方法
- 十进制与二进制之间的联系
- .Net网站架构设计(五) 消息中间件
- 带你搞懂朴素贝叶斯分类算法
- EOJ 3441-唐纳德与子串 (Easy)
- ABAP表抛FTP通用程序
- 人工智障学习笔记——机器学习(11)PCA降维
- android 自定义相机返回图片URL,高清
- Error while building/deploying project
- Vuejs实践--v-model
- 网络流模板题
- 日期函数
- centos系统中挂载盘和扩容硬盘的方法