时间限制: 1 s

空间限制: 128000 KB
题目等级 : 大师 Master
 
 
 
 
题目描述 Description

给你两个串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] 字符串匹配的更多相关文章

  1. codevs1404字符串匹配

    /* 无奈我改了那么久还是看的题解 首先跑一边kmp 几下ans[p]表示总共匹配到长度p的次数 这些不一定都是恰好到p 所以在处理一下 ans[p]通过处理变成 所有的匹配到长度p的次数 最后答案就 ...

  2. 字符串匹配的KMP算法

    ~~~摘录 来源:阮一峰~~~ 字符串匹配是计算机的基本任务之一. 举例来说,有一个字符串”BBC ABCDAB ABCDABCDABDE”,我想知道,里面是否包含另一个字符串”ABCDABD”? 许 ...

  3. {Reship}{KMP字符串匹配}

    关于KMP字符串匹配的介绍和归纳,作者的思路非常清晰,推荐看一下 http://blog.csdn.net/v_july_v/article/details/7041827

  4. 字符串匹配(hash算法)

    hash函数对大家来说不陌生吧 ? 而这次我们就用hash函数来实现字符串匹配. 首先我们会想一下二进制数. 对于任意一个二进制数,我们将它化为10进制的数的方法如下(以二进制数1101101为例): ...

  5. 【C++实现python字符串函数库】二:字符串匹配函数startswith与endswith

    [C++实现python字符串函数库]字符串匹配函数startswith与endswith 这两个函数用于匹配字符串的开头或末尾,判断是否包含另一个字符串,它们返回bool值.startswith() ...

  6. sdut 2125串结构练习--字符串匹配【两种KMP算法】

    串结构练习——字符串匹配 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目链接:http://acm.sdut.edu.cn/sduto ...

  7. C语言字符串匹配函数

    C语言字符串匹配函数,保存有需要时可以用: #include <stdio.h> #include <stdlib.h> #include <string.h> # ...

  8. 字符串匹配--Karp-Rabin算法

    主要特征 1.使用hash函数 2.预处理阶段时间复杂度O(m),常量空间 3.查找阶段时间复杂度O(mn) 4.期望运行时间:O(n+m) 本文地址:http://www.cnblogs.com/a ...

  9. 字符串匹配的KMP算法详解及C#实现

    字符串匹配是计算机的基本任务之一. 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD" ...

随机推荐

  1. php可以定义数组的常量吗

    是这样吗?<?php define('BEST_PHPER',array('name'=>'巩文','address'=>'china')); My God,明确告诉你不可以:原因是 ...

  2. 题解报告:hdu 1035 Robot Motion(简单搜索一遍)

    Problem Description A robot has been programmed to follow the instructions in its path. Instructions ...

  3. HBuilder发行原装安装包操作记录

    1.在左侧"项目管理器"中选择项目: 2.点击菜单栏中的"发行-->发行为原生安装包": 3.在弹出的App云端打包中填写相关信息: IOS开发者证书配置 ...

  4. Linux环境下安装JDK并配置环境变量

    首先查看是否已经安装了JDK并配置环境变量. [root@dhcc_plat opt]# java -version -bash: java: command not found [root@dhcc ...

  5. Vue组件之间通信的三种方式

    最近在看梁颠编著的<Vue.js实战>一书,感觉颇有收获,特此记录一些比价实用的技巧. 组件是MVVM框架的核心设计思想,将各功能点组件化更利于我们在项目中复用,这类似于我们服务端面向对象 ...

  6. Spring.Net学习笔记(1)-容器的使用

    一.下载地址: http://www.springframework.net/download.html 二.相关程序集 Spring.Net容器定义在程序集Spring.Core.dll中,它依赖于 ...

  7. git tag管理

    操作 实例 创建标签 git tag -a V1.2 -m 'WebSite version 1.2' 查看标签 git tag / git show V1.2 远程推送 git push origi ...

  8. [ TJOI 2007 ] 线段

    \(\\\) \(Description\) 一个\(N\times N\) 的网格,每行有一段要必走,求从\((1,1)\)到\((N,N)\)的最短路长度. \(N\le 2\times10^4\ ...

  9. 【工具】Webpack

    远程仓库建立 码云创建组织项目 git clone ssh 切换到主分支mmall-fe后git remote add origin ssh git pull origin master把master ...

  10. Jmeter接口测试---webservices

    Jmeter与LR相比来说,测试webservices接口要简单很多. 下面说下具体的操作流程: 1.创建一个线程组 2.创建一个soap/xml请求 3.填写要进行测试webservice的请求内容 ...