KMP之所以线性,因为匹配的时候i是不往回走的

我们只用调整j的位置

假设在s中找t

用二元组(i,j)表示s串的[i-j+1,i] 与t串的[1,j]匹配

假设s[i+1]和t[j]匹配上了,就j++

如果不匹配的话,我们就想办法调整j,

直到找到一个满足二元组条件的j并且t[j+1]=s[i]

快速调整j就是利用nxt数组的过程,

处理nxt的方法类似与两个串之间的匹配

 #include<cstdio>
#include<algorithm>
#include<cstring>
#define N 1000010
using namespace std;
char s[N],t[N];
int T,nxt[N],n,m,ans;
int main()
{
scanf("%d",&T);
getchar();
while (T--)
{
ans=;
memset(nxt,,sizeof(nxt));
scanf("%s%s",s+,t+);
n=strlen(s+),m=strlen(t+);
for (int i=,j=;i<=n;i++)
{
while (j> && s[j+]!=s[i]) j=nxt[j];
if (s[j+]==s[i]) j++;
nxt[i]=j;
}
for (int i=,j=;i<=m;i++)
{
while (j> && s[j+]!=t[i]) j=nxt[j];
if (s[j+]==t[i]) j++;
if (j==n) ans++,j=nxt[j];
}
printf("%d\n",ans);
}
return ;
}

POJ 3461Oulipo KMP模板的更多相关文章

  1. POJ Oulipo KMP 模板题

    http://poj.org/problem?id=3461 Oulipo Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4 ...

  2. POJ Oulipo(KMP模板题)

    题意:找出模板在文本串中出现的次数 思路:KMP模板题 #include<cstdio> #include<cstring> #include<cmath> #in ...

  3. POJ:3461-Oulipo(KMP模板题)

    原题传送:http://poj.org/problem?id=3461 Oulipo Time Limit: 1000MS Memory Limit: 65536K Description The F ...

  4. hdu 1686 & poj 2406 & poj 2752 (KMP入门三弹连发)

    首先第一题 戳我穿越;http://acm.hdu.edu.cn/showproblem.php?pid=1686 题目大意好理解,每组输入一个子串和一个母串,问在母串中有多少个子串? 文明人不要暴力 ...

  5. Oulipo----poj3461(kmp模板)

    题目链接:http://poj.org/problem?id=3461 和 减花布条 的题对比一下: 求s2中s1的个数kmp模板: #include<stdio.h> #include& ...

  6. hdu 1686 KMP模板

    // hdu 1686 KMP模板 // 没啥好说的,KMP裸题,这里是MP模板 #include <cstdio> #include <iostream> #include ...

  7. Oulipo HDU 1686 KMP模板

    题目大意:求模式串在主串中的出现次数. 题目思路:KMP模板题 #include<iostream> #include<algorithm> #include<cstri ...

  8. KMP模板(bin)

    KMP模板 主要是kuangbin的模板,之后加了一点我的习惯和理解. kmpN() 作用:构造next数组 参数:模式串,模式串长度 kmpC() 作用:返回模式串在主串中出现的次数(可重复) 参数 ...

  9. HDU 1711 - Number Sequence - [KMP模板题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 Time Limit: 10000/5000 MS (Java/Others) Memory L ...

随机推荐

  1. lintcode 110最小路径和

    最小路径和   描述 笔记 数据 评测 给定一个只含非负整数的m*n网格,找到一条从左上角到右下角的可以使数字和最小的路径. 注意事项 你在同一时间只能向下或者向右移动一步 您在真实的面试中是否遇到过 ...

  2. 使用Git将本地项目上传到码云

    01.码云上创建一个项目 testgit (名字随意) 02.进入本地想要上传的目录,然后使用git bash 03.cd到想要上传的目录 04.$ git init 初始化一个git 本地仓库(项目 ...

  3. 4W条人才表循环处理业务sql优化过程

    场景: 使用windows服务定时更新合同数据:执行存储过程(pas_RefreshContractStatus),但存储过程里面有一个需要更新4W条人才表循环处理业务 问题: 循环更新4W条人才表状 ...

  4. OracleWeblogic12C安装教程

    一,安装WebLogic Server 1. 双击exe安装文件 2.准备安装文件 3. 生成向导序列 4. 选择安装路径 5. 开始安装 经过以上步骤,weblogic已经成功安装到了你的电脑上,但 ...

  5. php 微信公众号图文消息回复的实现 与access_token

    //代码如下 <?phpclass IndexAction extends Action { public function __construct(){ } public function i ...

  6. 使用命令行设置MySql编码格式

    使用命令行设置MySql编码格式 1.登录mysql 2.输入 SHOW VARIABLES LIKE 'character_set_%'; 3.查看 value值是否为utf8,如果不是,则使用SE ...

  7. MPP(大规模并行处理)

    1. 什么是MPP? MPP (Massively Parallel Processing),即大规模并行处理,在数据库非共享集群中,每个节点都有独立的磁盘存储系统和内存系统,业务数据根据数据库模型和 ...

  8. [Hdu1166]敌兵布阵(CQD分治)

    CQQ分治 Code #include <cstdio> #include <cstring> #define N 50010 struct info{ int x,p,v; ...

  9. java练习题——数组

    上述代码可以顺利通过编译,并且输出一个“很奇怪”的结果:[Ljava.lang.Object;@2a139a55 为什么会出现这种情况? 直接输出object的对象,系统会输出地址,如果想要输出其中的 ...

  10. HDU 4405 Aeroplane chess(期望dp)

    Aeroplane chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...