<题目链接>

题目大意:

输入一个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】(计算模式串匹配的次数——与已匹配的字串可以有交集)的更多相关文章

  1. HDU - 1686 Oulipo KMP匹配运用

    id=25191" target="_blank" style="color:blue; text-decoration:none">HDU - ...

  2. hdu 1686 Oulipo KMP匹配次数统计

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1686 分析:典型的KMP算法,统计字符串匹配的次数. 用Next数组压缩时间复杂度,要做一些修改. / ...

  3. HDU1686 计算模式串匹配的次数

    题目大意: 输入一个T,表示有T组测试数据: 每组测试数据包括一个字符串W,T,T长度大于W小于1000000,w长度小于10000,计算W匹配到T中成功的次数: 这题很明显要用KMP算法,不然很容易 ...

  4. 洛谷 P3375 【模板】KMP字符串匹配 || HDU 1686 Oulipo || kmp

    HDU-1686 P3375 kmp介绍: http://www.matrix67.com/blog/archives/115 http://www.cnblogs.com/SYCstudio/p/7 ...

  5. HDU 1686 - Oulipo - [KMP模板题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1686 Time Limit: 3000/1000 MS (Java/Others) Memory Li ...

  6. hdu 1686 Oulipo kmp算法

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1686 题目: Problem Description The French author George ...

  7. hdu 1686 Oulipo (kmp)

    Problem Description The French author Georges Perec (1936–1982) once wrote a book, La disparition, w ...

  8. HDU 1686 Oulipo (KMP 可重叠)

    题目链接 Problem Description The French author Georges Perec (1936–1982) once wrote a book, La dispariti ...

  9. HDU 1686 Oulipo kmp裸题

    kmp算法可参考 kmp算法 汇总 #include <bits/stdc++.h> using namespace std; const int maxn=1000000+5; cons ...

随机推荐

  1. Linux下搭建gtk+2.0开发环境

    安装gtk2.0 sudo apt-get install libgtk2.0-dev 查看 2.x 版本 pkg-config --modversion gtk+-2.0 #有可能需要sudo ap ...

  2. EOF \n \0 NULL 之间的区别

    \n 是换行符 \0 是字符串的结束标志 EOF是流的结束标志 FILE* 这种流 NULL 是指针为空 第一个问题是EOF  它是end of file的缩写,表示"文字流"(s ...

  3. Properties文件工具类的使用--获取所有的键值、删除键、更新键等操作

    有时候我们希望处理properties文件,properties文件是键值对的文件形式,我们可以借助Properties类操作. 工具类如下:(代码中日志采用了slf4j日志) package cn. ...

  4. Windows下Anaconda的安装和简单使用

    Windows下Anaconda的安装和简单使用 Anaconda is a completely free Python distribution (including for commercial ...

  5. mysql系列十、mysql索引结构的实现B+树/B-树原理

    一.MySQL索引原理 1.索引背景 生活中随处可见索引的例子,如火车站的车次表.图书的目录等.它们的原理都是一样的,通过不断的缩小想要获得数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的 ...

  6. 现代C++之理解decltype

     现代C++之理解decltype decltype用于生成变量名或者表达式的类型,其生成的结果有的是显而易见的,可以预测的,容易理解,有些则不容易理解.大多数情况下,与使用模板和auto时进行的类型 ...

  7. 在window是下安装hadoop过程

    详细见http://www.cnblogs.com/kinglau/archive/2013/08/20/3270160.html

  8. 蝉知CMS本地迁移到服务器具体步骤

    蝉知迁移步骤(2个方案,二选一即可) 方案一(整个chanzhi(eps)目录拷贝,假设新安装的蝉知文件夹名称为chanzhieps): 1.在新服务器上安装相同版本(版本号必须一致)的蝉知(安装文档 ...

  9. redis介绍以及安装

    一.redis介绍 redis是一个key-value存储系统.和Memcached类似,它支持存储的values类型相对更多,包括字符串.列表.哈希散列表.集合,有序集合. 这些数据类型都支持pus ...

  10. java ServerSocket

    public Socket accept() //等待连接,该方法阻塞 public void close() //关闭服务器套接字 ServerSocket只连一次的程序 /* this is se ...