字符串匹配(codevs 1404)
给你两个串A,B,可以得到从A的任意位开始的子串和B匹配的长度。
给定K个询问,对于每个询问给定一个x,求出匹配长度恰为x的位置有多少个。
N,M,K<=200000
第一行三个数 N,M,K,表示A的长度、B的长度和询问数。
第二行为串A。
第三行为串B。
接下来K行,每行1个数X。
对于每个询问输出一个数。
6 2 2
aabcde
ab
0
2
4
1
各个测试点1s
/*
num[i]表示s1数组匹配到i位置时的匹配长度
sum[i]表示长度能匹配到i的串的个数,所以询问时要减去sum[i+1]
sum的求法:
首先求出num,然后sum[num[i]]++,并且i的匹配长度也是满足fail[i]的
*/
#include<cstdio>
#include<iostream>
#include<cstring>
#define M 200010
using namespace std;
int fail[M],num[M],s1[M],s2[M],len1,len2,m;
int sum[M];
void get_fail()
{
fail[]=;
for(int i=;i<=len2;i++)
{
int p=fail[i-];
while(p&&s2[p+]!=s2[i])p=fail[p];
if(s2[p+]==s2[i])
fail[i]=p+;
else fail[i]=;
}
}
void kmp()
{
int p=;
for(int i=;i<=len1;i++)
{
while(p&&s1[i]!=s2[p+])p=fail[p];
if(s1[i]==s2[p+])p++;
num[i]=p;
if(p==len2)p=fail[p];
}
for(int i=;i<=len1;i++)sum[num[i]]++;
for(int i=len2;i>=;i--)sum[fail[i]]+=sum[i];
}
int main()
{
scanf("%d%d%d",&len1,&len2,&m);
for(int i=;i<=len1;i++)
{
char c;cin>>c;
s1[i]=c;
}
for(int i=;i<=len2;i++)
{
char c;cin>>c;
s2[i]=c;
}
get_fail();
kmp();
while(m--)
{
int x;scanf("%d",&x);
printf("%d\n",sum[x]-sum[x+]);
}
return ;
}
字符串匹配(codevs 1404)的更多相关文章
- Codevs 1404 字符串匹配(Kmp)
1404 字符串匹配 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你两个串A,B,可以得到从A的任意位开始的子串和B匹配的 ...
- 字符串匹配的KMP算法
~~~摘录 来源:阮一峰~~~ 字符串匹配是计算机的基本任务之一. 举例来说,有一个字符串”BBC ABCDAB ABCDABCDABDE”,我想知道,里面是否包含另一个字符串”ABCDABD”? 许 ...
- {Reship}{KMP字符串匹配}
关于KMP字符串匹配的介绍和归纳,作者的思路非常清晰,推荐看一下 http://blog.csdn.net/v_july_v/article/details/7041827
- 字符串匹配(hash算法)
hash函数对大家来说不陌生吧 ? 而这次我们就用hash函数来实现字符串匹配. 首先我们会想一下二进制数. 对于任意一个二进制数,我们将它化为10进制的数的方法如下(以二进制数1101101为例): ...
- 【C++实现python字符串函数库】二:字符串匹配函数startswith与endswith
[C++实现python字符串函数库]字符串匹配函数startswith与endswith 这两个函数用于匹配字符串的开头或末尾,判断是否包含另一个字符串,它们返回bool值.startswith() ...
- sdut 2125串结构练习--字符串匹配【两种KMP算法】
串结构练习——字符串匹配 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目链接:http://acm.sdut.edu.cn/sduto ...
- C语言字符串匹配函数
C语言字符串匹配函数,保存有需要时可以用: #include <stdio.h> #include <stdlib.h> #include <string.h> # ...
- 字符串匹配--Karp-Rabin算法
主要特征 1.使用hash函数 2.预处理阶段时间复杂度O(m),常量空间 3.查找阶段时间复杂度O(mn) 4.期望运行时间:O(n+m) 本文地址:http://www.cnblogs.com/a ...
- 字符串匹配的KMP算法详解及C#实现
字符串匹配是计算机的基本任务之一. 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD" ...
- zstu.4194: 字符串匹配(kmp入门题&& 心得)
4194: 字符串匹配 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 206 Solved: 78 Description 给你两个字符串A,B,请 ...
随机推荐
- 使用gitblit 在windows平台搭建git服务器
1.下载jdk,安装并且配置好环境变量 2.下载gitblit 直接解压无需安装 3.配置gitblit 1.修改gitblit安装目录下的data文件下的gitblit.properties.将in ...
- AJPFX关于Swing组件的总结
默认布局管理器是流式布局(FlowLayout) 按钮的建立: jb1=new JButton("香蕉") 面板的建立:jp1=new JPanel(); 设置JFrame的标题: ...
- OpenGL 透视投影推导图解
有它足够了,转载自:http://blog.sina.com.cn/s/blog_73428e9a0102v920.html
- 通过HTML 取得页面、屏幕、浏览器的高度宽度
一.介绍 1. 容器 一个页面的展示,从外到内的容器为:屏幕.浏览器以及页面本身. HTML元素展现在页面内,页面展现在浏览器内,而浏览器展现在屏幕内. 通过Js的一些对象可以获取这些容器的高度.宽度 ...
- C++模板类头文件和实现文件分离
http://www.cnblogs.com/lvdongjie/p/4288373.html 如何实现C++模板类头文件和实现文件分离,这个问题和编译器有关. 引用<<C++primer ...
- java访问数据库步骤详解
eg1: public static void main(String[] args) throws ClassNotFoundException, SQLException { //第一步:加载JD ...
- Qt和Cocoa混合编程
https://el-tramo.be/blog/mixing-cocoa-and-qt/
- 深度剖析 MySQL 事务隔离
概述 今天主要分享下MySQL事务隔离级别的实现原理,因为只有InnoDB支持事务,所以这里的事务隔离级别是指InnoDB下的事务隔离级别. 隔离级别 读未提交:一个事务可以读取到另一个事务未提交的修 ...
- vscode setting.json
setting.json { "sync.gist": "#github的码##", "sync.lastUpload": "20 ...
- Modal 下面的 v-model 就是显示不显示 true 或 false
Modal 下面的 v-model 就是显示不显示 true 或 false