hdu 1686 Oulipo 【KMP】(计算模式串匹配的次数——与已匹配的字串可以有交集)
<题目链接>
题目大意:
输入一个T,表示有T组测试数据;
每组测试数据包括一个字符串W,T,T的长度$\le10^6$,$W$的长度$\le 10^4$,计算W匹配到T中成功的次数;
需要注意的是:
第一次将匹配成功的位置得到后,若从匹配到的位置开始算起,会超时,实际上没必要,每次模式串匹配成功时,都将个数+1,然后从next数组的下一位继续开始匹配,直至待匹配串结束
代码如下:实际上就是将kmp裸题稍微改一下。
若两个不同的匹配没有交集则j=0,若存在交集则j=next[j]
#include <bits/stdc++.h>
using namespace std; const int N1 = 1e6+, N2 = 1e4+;
int nxt[N2];
char str1[N1],str2[N2];
int cnt; //匹配的子串个数 inline void get_nxt(int len2){
int i = , j = -;
nxt[] = -;
while (i<len2){
if (j == - || str2[i] == str2[j])nxt[++i]=++j;
else j = nxt[j];
}
}
inline void kmp(int len1, int len2){
int i = , j = ;
get_nxt(len2);
while (i<len1){
if (j == - || str1[i] == str2[j])++i,++j;
else j = nxt[j];
if (j == len2)++cnt,j=nxt[j]; //找到一个匹配的串后,模式串的起点从nxt数组下一个点继续匹配
}
}
int main(){
int n;scanf("%d", &n);getchar();
int len1,len2;
while (n--){
gets(str2);gets(str1);
len1 = strlen(str1);
len2 = strlen(str2);
cnt = ;
kmp(len1, len2);
printf("%d\n", cnt);
}
}
hdu 1686 Oulipo 【KMP】(计算模式串匹配的次数——与已匹配的字串可以有交集)的更多相关文章
- HDU - 1686 Oulipo KMP匹配运用
id=25191" target="_blank" style="color:blue; text-decoration:none">HDU - ...
- hdu 1686 Oulipo KMP匹配次数统计
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1686 分析:典型的KMP算法,统计字符串匹配的次数. 用Next数组压缩时间复杂度,要做一些修改. / ...
- HDU1686 计算模式串匹配的次数
题目大意: 输入一个T,表示有T组测试数据: 每组测试数据包括一个字符串W,T,T长度大于W小于1000000,w长度小于10000,计算W匹配到T中成功的次数: 这题很明显要用KMP算法,不然很容易 ...
- 洛谷 P3375 【模板】KMP字符串匹配 || HDU 1686 Oulipo || kmp
HDU-1686 P3375 kmp介绍: http://www.matrix67.com/blog/archives/115 http://www.cnblogs.com/SYCstudio/p/7 ...
- HDU 1686 - Oulipo - [KMP模板题]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1686 Time Limit: 3000/1000 MS (Java/Others) Memory Li ...
- hdu 1686 Oulipo kmp算法
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1686 题目: Problem Description The French author George ...
- hdu 1686 Oulipo (kmp)
Problem Description The French author Georges Perec (1936–1982) once wrote a book, La disparition, w ...
- HDU 1686 Oulipo (KMP 可重叠)
题目链接 Problem Description The French author Georges Perec (1936–1982) once wrote a book, La dispariti ...
- HDU 1686 Oulipo kmp裸题
kmp算法可参考 kmp算法 汇总 #include <bits/stdc++.h> using namespace std; const int maxn=1000000+5; cons ...
随机推荐
- tcp的连接断开
tcp的断开连接是需要主机完成四次挥手的过程的,并不是断网了就表示断开连接了.假如双方已经建立起了连接,突然一方断网(比如突然停电,或者网线突然被拔了),对于另一方来讲他并不会知道这个情况,他依然认为 ...
- Spring源码学习资料
未完待续.. github地址 https://github.com/spring-projects 学习地址 https://github.com/code4craft/tiny-spring 推荐 ...
- Fragment的常用写法
一般通过add.show.hide相结合的方法来控制Fragment的显示和隐藏,这样不会再重写一遍Fragment的生命周期,节省了时间和内存,当然特殊需求除外. package com.examp ...
- js中获取时间new date()的用法和获取时间戳
获取时间: 1 var myDate = new Date();//获取系统当前时间 获取特定格式的时间: 1 myDate.getYear(); //获取当前年份(2位) 2 myDate.getF ...
- NSURLResponse下载
// // ViewController.m // 05-NSURLConnestion(下载) // // Created by jerry on 15/10/24. // Copyright (c ...
- Hadoop的RPC机制及简单实现
1.RPC简介 Remote Procedure Call 远程过程调用协议 RPC——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些 ...
- Python3 configparse模块(配置)
ConfigParser模块在python中是用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(section),每个节可以有多个参数(键=值). 注意:在 ...
- argv[1] 路径问题
在看<学习opencv>一书时遇到一个小问题:函数只是通过argv传递参数来读取图片并显示,但是却一直弹出画布,没有图像. 如下:test.c # include<stdio.h&g ...
- 升级版updateOozie.sh
以前的版本检测当天的Tar包,并只能选择1个Tar包进行更新代码,当天生成多个版本时需修改脚本中配置,并不方便. 升级版兼容目录下存在一个或者多个Tar包的情况: 1.单个Tar包时,直接解压缩到当前 ...
- 如何交叉编译 linux kernel 内核
Compilation We first need to move the config file by running cp arch/arm/configs/bcmrpi_cutdown_defc ...