hdu 1686 KMP模板

 1 //    hdu 1686 KMP模板
 2
 3 //    没啥好说的,KMP裸题,这里是MP模板
 4
 5 #include <cstdio>
 6 #include <iostream>
 7 #include <cstring>
 8 #include <algorithm>
 9
10 using namespace std;
11
12 const int MAX_N = 1000008;
13 const int MAX_M = 10008;
14 char T[MAX_N];
15 char p[MAX_M];
16 int f[MAX_M];
17 int n,m;
18
19 void getfail(){
20     f[0] = f[1] = 0;
21     for (int i=1;i<m;i++){
22         int j = f[i];
23         while(j && p[i]!=p[j])
24             j = f[j];
25         f[i+1] = (p[i]==p[j]) ? j + 1 : 0;
26     }
27 }
28
29 int cmp(){
30     int cnt = 0;
31     int j = 0;
32     for (int i=0;i<n;i++){
33         while(j && T[i] != p[j])
34             j = f[j];
35         if (T[i] == p[j])
36             j++;
37         if (j==m){
38             cnt++;
39         }
40     }
41     return cnt;
42 }
43
44 int KMP(){
45     getfail();
46     return cmp();
47 }
48
49 void input(){
50     scanf("%s%s",p,T);
51     n = strlen(T);
52     m = strlen(p);
53     printf("%d\n",KMP());
54 }
55
56 int main(){
57     int t;
58     //freopen("1.txt","r",stdin);
59     scanf("%d",&t);
60     while(t--){
61         input();
62     }
63 }
时间: 2024-10-14 06:53:43

hdu 1686 KMP模板的相关文章

hdu 1711 KMP模板题

// hdu 1711 KMP模板题 // 贴个KMP模板吧~~~ #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using namespace std; const int MAX_N = 1000008; const int MAX_M = 10008; int T[MAX_N]; int p[MAX_M]; int f[MAX_M]; int

[kuangbin带你飞]专题十六 KMP &amp; 扩展KMP &amp; Manacher B - Oulipo HDU - 1686(kmp)

B - Oulipo HDU - 1686 题目链接:https://vjudge.net/contest/70325#problem/B 题目: The French author Georges Perec (1936–1982) once wrote a book, La disparition, without the letter 'e'. He was a member of the Oulipo group. A quote from the book: Tout avait Pa

HDU 2087 kmp模板题

s为主串 t为模板串 求t的nextt 加const #include<stdio.h> #include<string.h> #include<algorithm> #include<map> #include<math.h> #include<queue> using namespace std; char s[1005]; char t[1005]; int nextt[1005]; void makenext(const ch

HDU 1686 (KMP)

Oulipo Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9731    Accepted Submission(s): 3859 Problem Description The French author Georges Perec (1936–1982) once wrote a book, La disparition, wi

HDU 1686 (KMP模式串出现的次数) Oulipo

题意: 求模式串W在母串T中出现的次数,各个匹配串中允许有重叠的部分. 分析: 一开始想不清楚当一次匹配完成时该怎么办,我还SB地让i回溯到某个位置上去. 后来仔细想想,完全不用,直接让模式串向前滑动,即 j = next[j] 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 5 using namespace std; 6 7 const int maxn1 = 10000 + 10;

Number Sequence HDU 1711 KMP 模板

题目大意:两个数组匹配,求子串首次出现的位置. 题目思路:数组长度,比较大,朴素算法的时间复杂度为 m*n超时.KMP的时间复杂度为m+n可行. #include<iostream> #include<algorithm> #include<cstring> #include<vector> #include<stdio.h> #include<stdlib.h> #include<queue> #include<m

hdu 1686 &amp; poj 2406 &amp; poj 2752 (KMP入门三弹连发)

首先第一题 戳我穿越;http://acm.hdu.edu.cn/showproblem.php?pid=1686 题目大意好理解,每组输入一个子串和一个母串,问在母串中有多少个子串? 文明人不要暴力,因为宽度会超时,除去暴力后这就是赤果果的KMP KMP的重点在于在子串中建立一个匹配表,记录 到每一位的 前缀后缀 中的相同的子子串的最大长度 然后在比较子母串的时候当遇到不同时 后移的位数就是前面相同的个数减去对应的匹配表例的数 额 讲的不清不楚 那推荐戳这里:http://kb.cnblogs

HDU 1711 Number Sequence(KMP模板)

http://acm.hdu.edu.cn/showproblem.php?pid=1711 这道题就是一个KMP模板. 1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 5 const int maxn = 1000000+5; 6 7 int n,m; 8 9 int next[maxn]; 10 int a[maxn], b[maxn]; 11 12 void get_next() 13 { 1

HDU 1686 Oulipo(KMP)

Problem Description The French author Georges Perec (1936–1982) once wrote a book, La disparition, without the letter 'e'. He was a member of the Oulipo group. A quote from the book: Tout avait Pair normal, mais tout s'affirmait faux. Tout avait Fair