G2. 唐纳德与子串 (Hard)kmp
来源:互联网 发布:js字符串叠加 编辑:程序博客网 时间:2024/05/22 01:41
G2. 唐纳德与子串 (Hard)
Time limit per test: 2.5 seconds
Memory limit: 512 megabytes
子串的定义是在一个字符串中连续出现的一段字符。这里,我们使用
对于一个给定的字符串
Input
输入具有如下形式:
第一行一个字符串
第二行一个整数
接下来每行:首先两个整数
字符串中只会出现
数据规模约定:
- 对于 Easy 档:
1≤|s|≤100,q≤∑|zi|≤100 。 - 对于 Hard 档:
1≤|s|≤105,q≤∑|zi|≤105 。
Output
对于每次询问,输出一个整数,表示答案。
Examples
input
thisisagarbagecompetitionhahahah50 30 a1 5 is25 30 hah6 12 ag7 12 ag
output
62221#include <iostream>#include <cstring>using namespace std; int l,r,p,sum;int next[100000];string s,z;void gtnext(){ int k=-1,j=0; next[0]=-1; while(j<z.size()) { if(k==-1||z[j]==z[k]) { j++; k++; if(z[j]!=z[k]) next[j]=k; else next[j]=next[k]; } else k=next[k]; }}int kmp(){ int j=l,k=0; while(j<=r) { if(k==-1||s[j]==z[k]) { j++; k++; } else k=next[k]; if(k==z.size()) { sum++; k=next[k]; } } cout<<sum<<endl;}int main(){ cin>>s; cin>>p; for(int i=0;i<p;++i) { sum=0; cin>>l>>r; cin>>z; memset(next,0,sizeof(next)); gtnext(); kmp(); } return 0;}
阅读全文
0 0
- G2. 唐纳德与子串 (Hard)kmp
- EOJ #3441 唐纳德与子串 (Easy)【KMP】
- EOJ 3441-唐纳德与子串 (Easy)
- EOJ 3441 唐纳德与子串 (Easy)
- 唐纳德与子串 (Easy)(计算子串个数)
- EOJ Monthly 2017.12 G1. 唐纳德与子串 (Easy)
- EOJ Monthly 2017.12 (暨 ECNU 12 月内部选拔)G1. 唐纳德与子串 (Easy)
- (substr strstr 的学习) EOJ Monthly 2017.12 (暨 ECNU 12 月内部选拔) G1. 唐纳德与子串 (Easy)
- KMP与最小覆盖子串
- KMP与最小覆盖子串
- KMP与最小覆盖子串
- 回文子串对(扩展kmp-kmp与回文子串)
- kmp 子串查找
- OpenJudge_P1746 子串(KMP)
- kmp子串查找算法
- KMP 算法,search 子串
- KMP子串匹配算法
- 最小覆盖子串 KMP
- Python 正则表达式笔记(1) 常见字符
- 第6章gp_toolkit管理架构-Checking Query Disk Spill Space Usage
- lua I/O
- Ubuntu提示boot分区剩余空间不足或boot分区已满
- 语义网络,语义网,链接数据和知识图谱
- G2. 唐纳德与子串 (Hard)kmp
- mysql数据库开启innodb储存引擎方法
- 第十四周 项目三 B_树的基本操作
- 梯度下降算法
- 项目需求
- stopPropagation&&preventDefault
- Poj Pre-Post-erous!
- jquery实现全选反选操作
- EOJ Monthly 2017.12 易位构词(贪心+STL特性容器 +头文件<bits/stdc++.h> )