[codeVS1404] 字符串匹配
时间限制: 1 s
给你两个串A,B,可以得到从A的任意位开始的子串和B匹配的长度。
给定K个询问,对于每个询问给定一个x,求出匹配长度恰为x的位置有多少个。
N,M,K<=200000
输入描述
Input Description
第一行三个数 N,M,K,表示A的长度、B的长度和询问数。
第二行为串A。
第三行为串B。
接下来K行,每行1个数X。
输出描述
Output Description
对于每个询问输出一个数。
样例输入
Sample Input
6 2 2
aabcde
ab
0
2
样例输出
Sample Output
4
1
数据范围及提示
Data Size & Hint
各个测试点1s
思路
KMP;
自己乱搞才得了10分,然后羞耻的看了题解;
先求B串next数组;
然后匹配,记录ans;
然后,这个ans是残缺的,需要倒序补充,ans[next[i]]+=ans[i];
这样得到的ans[i]就会是匹配长度大于等于i的位数;
然后,解决询问。
代码实现
#include<cstdio>
const int maxn=3e5;
int n,m,k,a;
char ch[maxn],cn[maxn];
int next[maxn],ans[maxn];
int main(){
scanf("%d%d%d",&n,&m,&k);
scanf("%s%s",ch+,cn+);
for(int i=,j=;i<=m;i++){
while(j&&cn[j+]!=cn[i]) j=next[j];
if(cn[j+]==cn[i]) ++j;
next[i]=j;
}
for(int i=,j=;i<=n;i++){
while(j&&cn[j+]!=ch[i]) j=next[j];
if(cn[j+]==ch[i]) ++j;
ans[j]++;
}
for(int i=m;i>;i--) ans[next[i]]+=ans[i];
for(int i=;i<m;i++) ans[i]-=ans[i+];
while(k--){
scanf("%d",&a);
printf("%d\n",ans[a]);
}
return ;
}
KMP的题都好玄学,还是我变傻了。。。
[codeVS1404] 字符串匹配的更多相关文章
- codevs1404字符串匹配
/* 无奈我改了那么久还是看的题解 首先跑一边kmp 几下ans[p]表示总共匹配到长度p的次数 这些不一定都是恰好到p 所以在处理一下 ans[p]通过处理变成 所有的匹配到长度p的次数 最后答案就 ...
- 字符串匹配的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" ...
随机推荐
- EntityFramework:An error occurred while executing the command definition. See the inner exception for details.
错误描述: 调用EF中的FirstOrDefault()时,报错误:An error occurred while executing the command definition. See the ...
- Android 性能优化(9)网络优化( 5)Optimizing Server-Initiated Network Use
Optimizing Server-Initiated Network Use This lesson teaches you to Send Server Updates with GCM Netw ...
- maven build过程中遇到的问题以及解决方案
(1)不支持泛型以及@Override 问题来源:使用了低版本的jdk,默认情况下maven使用的是jdk1.5的版本,而泛型和@Override是后期版本才有的,需要更改maven默认的jdk版本. ...
- iOS popViewControllerAnimated后刷新原先的表格
当主页面列表push子页面,子页面修改后pop回主页面后应该刷新主页面列表数据,不修改子页面信息就不刷新主页面列表,这里介绍个取巧的方法:利用[NSNotificationCenter default ...
- 两个input可能会用到的小方法
1.一个普通的input元素,在不被 form包裹的时候,如何跳转或搜索 var oInput = document.getElementsByTagName('input')[0]; oInput. ...
- Python 语言搭建SELENIUM测试环境,搭建过程记录。
第一步,安装Python: 第二步,安装SetupTools: 第三步,安装Pip: 第四步,安装selenium(for python) 第五步,新建第一个基于Firefox的测试用例 上述 只是步 ...
- 处理sql锁死问题
--SQL Server死锁的查询方法: exec master.dbo.p_lockinfo 0,0; ---显示死锁的进程,不显示正常的进程 exec master.dbo.p_locki ...
- [C#源码]自动更改桌面背景
操作代码:ChangeDesktop.cs using System;using System.Collections.Generic;using System.ComponentModel;usin ...
- HDU_1143_tri tiling
Tri Tiling Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- 安卓app测试之Monkey日志分析
转:原文:https://blog.csdn.net/a136332462/article/details/76066909 一.一般测试结果分析-搜索关键字: 1.无响应问题可以在日志中搜索 “A ...