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 {
14     int i = -1, j = 0;
15     ::next[0] = -1;
16     while (j < m)
17     {
18         if (i == -1 || b[i] == b[j])
19             ::next[++j] = ++i;
20         else
21             i = ::next[i];
22     }
23 }
24
25
26 int kmp()
27 {
28     int i = 0, j = 0;
29     while (i < n)
30     {
31         if (j == -1 || a[i] == b[j])
32         {
33             i++;
34             j++;
35         }
36         else
37             j = ::next[j];
38         if (j == m)
39             return i;
40     }
41     return -1;
42 }
43
44 int main()
45 {
46     //freopen("D:\\txt.txt", "r", stdin);
47     int t;
48     cin >> t;
49     while (t--)
50     {
51         cin >> n >> m;
52         for (int i = 0; i < n; i++)
53             cin >> a[i];
54         for (int i = 0; i < m; i++)
55             cin >> b[i];
56         get_next();
57         int k=kmp();
58         if (k!=-1)  cout << k-m+1 << endl;
59         else cout << "-1" << endl;
60     }
61     return 0;
62 }
时间: 2024-08-02 10:59:17

HDU 1711 Number Sequence(KMP模板)的相关文章

HDU 1711 Number Sequence(KMP模板)

Problem Description: Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1], b[2], ...... , b[M] (1 <= M <= 10000, 1 <= N <= 1000000). Your task is to find a number K which make a[K] = b[1], a[K + 1] = b[2], ...... , a[K + M - 1]

hdu 1711 Number Sequence KMP模板题

题意:给你两个数组,求第二个数组在第一个数组中的位置,若不存在,则输出-1. #include <cstdio> #include <cmath> #include <iostream> #include <string.h> #include <algorithm> using namespace std; int d[10005]; int f[1000005]; int Next[20005]; void KMP(int s[],int l

hdu 1711 Number Sequence(KMP)

# include <stdio.h> # include <string.h> # include <algorithm> using namespace std; int n,m,next[10010],a[1000010],b[10010]; void Getnext() { int i=0,j=-1; next[0]=-1; while(i<m) { if(j==-1||b[i]==b[j]) i++,j++,next[i]=j; else j=next[

HDU 1711 Number Sequence KMP题解

KMP查找整数数列,不是查找字符串. 原理是一样的,不过把字符串转换为数列,其他基本上是一样的. #include <stdio.h> #include <string.h> const int MAX_N = 1000001; const int MAX_M = 10001; int strN[MAX_N], strM[MAX_M], next[MAX_M], N, M; void getNext() { memset(next, 0, sizeof(int) * M); for

HDU - 1711 Number Sequence KMP字符串匹配

HDU - 1711 Number Sequence Time Limit: 5000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Status Description Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1], b[2], ...... , b[M] (1 <= M <= 10000, 1 <=

HDU 1711 Number Sequence(KMP算法)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 15548    Accepted Submission(s): 6836 Problem Description Given two sequence

hdu 1711 Number Sequence KMP 基础题

Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 11691    Accepted Submission(s): 5336 Problem Description Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1],

(KMP 1.1)hdu 1711 Number Sequence(KMP的简单应用——求pattern在text中第一次出现的位置)

题目: Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 12902    Accepted Submission(s): 5845 Problem Description Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1

KMP算法的定义及KMP练手题 HDU 1711 Number Sequence (我的模板代码)

题意:就是要你来找出b数组在a数组中最先匹配的位置,如果没有则输出-1 思路:直接KMP算法(算法具体思想这位牛写的不错http://blog.csdn.net/v_july_v/article/details/7041827) AC代码: #include<cstdio> #include<cstring> #include<stdlib.h> #include<iostream> using namespace std; #define maxn 100

HDU 1711 Number Sequence(字符串匹配)

Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 10571    Accepted Submission(s): 4814 Problem Description Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1],